* [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist
@ 2018-05-25 14:04 ` Sinan Kaya
0 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-25 14:04 UTC (permalink / raw)
To: linux-pci, timur
Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Bjorn Helgaas, open list
It is up to a driver to implement shutdown() callback. If shutdown()
callback is not implemented, PCI device can have pending interrupt and
even do DMA transactions while the system is going down.
If kexec is in use, this can damage the newly booting kexec kernel
or even prevent it from booting altogether. Fallback to calling the
remove() callback if shutdown() isn't implemented for a given driver.
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
drivers/pci/pci-driver.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 6ace470..4ac72e3 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -475,8 +475,17 @@ static void pci_device_shutdown(struct device *dev)
pm_runtime_resume(dev);
+ /*
+ * Try shutdown callback if it exists, otherwise fallback to remove
+ * callback. PCI drivers can do DMA and have pending interrupts.
+ * Leaving the DMA and interrupts pending could damage the newly
+ * booting kexec kernel as well as prevent it from booting altogether
+ * if the pending interrupt is level.
+ */
if (drv && drv->shutdown)
drv->shutdown(pci_dev);
+ else if (drv && drv->remove)
+ drv->remove(pci_dev);
/*
* If this is a kexec reboot, turn off Bus Master bit on the
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist
@ 2018-05-25 14:04 ` Sinan Kaya
0 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-25 14:04 UTC (permalink / raw)
To: linux-pci, timur
Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Bjorn Helgaas, open list
It is up to a driver to implement shutdown() callback. If shutdown()
callback is not implemented, PCI device can have pending interrupt and
even do DMA transactions while the system is going down.
If kexec is in use, this can damage the newly booting kexec kernel
or even prevent it from booting altogether. Fallback to calling the
remove() callback if shutdown() isn't implemented for a given driver.
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
drivers/pci/pci-driver.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 6ace470..4ac72e3 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -475,8 +475,17 @@ static void pci_device_shutdown(struct device *dev)
pm_runtime_resume(dev);
+ /*
+ * Try shutdown callback if it exists, otherwise fallback to remove
+ * callback. PCI drivers can do DMA and have pending interrupts.
+ * Leaving the DMA and interrupts pending could damage the newly
+ * booting kexec kernel as well as prevent it from booting altogether
+ * if the pending interrupt is level.
+ */
if (drv && drv->shutdown)
drv->shutdown(pci_dev);
+ else if (drv && drv->remove)
+ drv->remove(pci_dev);
/*
* If this is a kexec reboot, turn off Bus Master bit on the
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist
@ 2018-05-25 14:04 ` Sinan Kaya
0 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-25 14:04 UTC (permalink / raw)
To: linux-arm-kernel
It is up to a driver to implement shutdown() callback. If shutdown()
callback is not implemented, PCI device can have pending interrupt and
even do DMA transactions while the system is going down.
If kexec is in use, this can damage the newly booting kexec kernel
or even prevent it from booting altogether. Fallback to calling the
remove() callback if shutdown() isn't implemented for a given driver.
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
drivers/pci/pci-driver.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 6ace470..4ac72e3 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -475,8 +475,17 @@ static void pci_device_shutdown(struct device *dev)
pm_runtime_resume(dev);
+ /*
+ * Try shutdown callback if it exists, otherwise fallback to remove
+ * callback. PCI drivers can do DMA and have pending interrupts.
+ * Leaving the DMA and interrupts pending could damage the newly
+ * booting kexec kernel as well as prevent it from booting altogether
+ * if the pending interrupt is level.
+ */
if (drv && drv->shutdown)
drv->shutdown(pci_dev);
+ else if (drv && drv->remove)
+ drv->remove(pci_dev);
/*
* If this is a kexec reboot, turn off Bus Master bit on the
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist
2018-05-25 14:04 ` Sinan Kaya
(?)
(?)
@ 2018-05-25 17:36 ` Sinan Kaya
-1 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-25 17:36 UTC (permalink / raw)
To: linux-pci-u79uwXL29TY76Z2rM5mHXA, timur-sgV2jX0FEOL9JmXXK+q4OQ
Cc: Bjorn Helgaas, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA,
kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, open list
[+cc kexec]
On 5/25/2018 7:04 AM, Sinan Kaya wrote:
> It is up to a driver to implement shutdown() callback. If shutdown()
> callback is not implemented, PCI device can have pending interrupt and
> even do DMA transactions while the system is going down.
>
> If kexec is in use, this can damage the newly booting kexec kernel
> or even prevent it from booting altogether. Fallback to calling the
> remove() callback if shutdown() isn't implemented for a given driver.
>
> Signed-off-by: Sinan Kaya <okaya-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
> ---
> drivers/pci/pci-driver.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 6ace470..4ac72e3 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -475,8 +475,17 @@ static void pci_device_shutdown(struct device *dev)
>
> pm_runtime_resume(dev);
>
> + /*
> + * Try shutdown callback if it exists, otherwise fallback to remove
> + * callback. PCI drivers can do DMA and have pending interrupts.
> + * Leaving the DMA and interrupts pending could damage the newly
> + * booting kexec kernel as well as prevent it from booting altogether
> + * if the pending interrupt is level.
> + */
> if (drv && drv->shutdown)
> drv->shutdown(pci_dev);
> + else if (drv && drv->remove)
> + drv->remove(pci_dev);
>
> /*
> * If this is a kexec reboot, turn off Bus Master bit on the
>
--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist
@ 2018-05-25 17:36 ` Sinan Kaya
0 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-25 17:36 UTC (permalink / raw)
To: linux-pci, timur
Cc: linux-arm-msm, linux-arm-kernel, Bjorn Helgaas, open list, kexec
[+cc kexec]
On 5/25/2018 7:04 AM, Sinan Kaya wrote:
> It is up to a driver to implement shutdown() callback. If shutdown()
> callback is not implemented, PCI device can have pending interrupt and
> even do DMA transactions while the system is going down.
>
> If kexec is in use, this can damage the newly booting kexec kernel
> or even prevent it from booting altogether. Fallback to calling the
> remove() callback if shutdown() isn't implemented for a given driver.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> ---
> drivers/pci/pci-driver.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 6ace470..4ac72e3 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -475,8 +475,17 @@ static void pci_device_shutdown(struct device *dev)
>
> pm_runtime_resume(dev);
>
> + /*
> + * Try shutdown callback if it exists, otherwise fallback to remove
> + * callback. PCI drivers can do DMA and have pending interrupts.
> + * Leaving the DMA and interrupts pending could damage the newly
> + * booting kexec kernel as well as prevent it from booting altogether
> + * if the pending interrupt is level.
> + */
> if (drv && drv->shutdown)
> drv->shutdown(pci_dev);
> + else if (drv && drv->remove)
> + drv->remove(pci_dev);
>
> /*
> * If this is a kexec reboot, turn off Bus Master bit on the
>
--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist
@ 2018-05-25 17:36 ` Sinan Kaya
0 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-25 17:36 UTC (permalink / raw)
To: linux-arm-kernel
[+cc kexec]
On 5/25/2018 7:04 AM, Sinan Kaya wrote:
> It is up to a driver to implement shutdown() callback. If shutdown()
> callback is not implemented, PCI device can have pending interrupt and
> even do DMA transactions while the system is going down.
>
> If kexec is in use, this can damage the newly booting kexec kernel
> or even prevent it from booting altogether. Fallback to calling the
> remove() callback if shutdown() isn't implemented for a given driver.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> ---
> drivers/pci/pci-driver.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 6ace470..4ac72e3 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -475,8 +475,17 @@ static void pci_device_shutdown(struct device *dev)
>
> pm_runtime_resume(dev);
>
> + /*
> + * Try shutdown callback if it exists, otherwise fallback to remove
> + * callback. PCI drivers can do DMA and have pending interrupts.
> + * Leaving the DMA and interrupts pending could damage the newly
> + * booting kexec kernel as well as prevent it from booting altogether
> + * if the pending interrupt is level.
> + */
> if (drv && drv->shutdown)
> drv->shutdown(pci_dev);
> + else if (drv && drv->remove)
> + drv->remove(pci_dev);
>
> /*
> * If this is a kexec reboot, turn off Bus Master bit on the
>
--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist
@ 2018-05-25 17:36 ` Sinan Kaya
0 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-25 17:36 UTC (permalink / raw)
To: linux-pci, timur
Cc: Bjorn Helgaas, linux-arm-msm, kexec, linux-arm-kernel, open list
[+cc kexec]
On 5/25/2018 7:04 AM, Sinan Kaya wrote:
> It is up to a driver to implement shutdown() callback. If shutdown()
> callback is not implemented, PCI device can have pending interrupt and
> even do DMA transactions while the system is going down.
>
> If kexec is in use, this can damage the newly booting kexec kernel
> or even prevent it from booting altogether. Fallback to calling the
> remove() callback if shutdown() isn't implemented for a given driver.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> ---
> drivers/pci/pci-driver.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index 6ace470..4ac72e3 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -475,8 +475,17 @@ static void pci_device_shutdown(struct device *dev)
>
> pm_runtime_resume(dev);
>
> + /*
> + * Try shutdown callback if it exists, otherwise fallback to remove
> + * callback. PCI drivers can do DMA and have pending interrupts.
> + * Leaving the DMA and interrupts pending could damage the newly
> + * booting kexec kernel as well as prevent it from booting altogether
> + * if the pending interrupt is level.
> + */
> if (drv && drv->shutdown)
> drv->shutdown(pci_dev);
> + else if (drv && drv->remove)
> + drv->remove(pci_dev);
>
> /*
> * If this is a kexec reboot, turn off Bus Master bit on the
>
--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-05-25 17:36 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-25 14:04 [PATCH] PCI: Try to clean up resources via remove if shutdown doesn't exist Sinan Kaya
2018-05-25 14:04 ` Sinan Kaya
2018-05-25 14:04 ` Sinan Kaya
[not found] ` <1527257063-15843-1-git-send-email-okaya-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-05-25 17:36 ` Sinan Kaya
2018-05-25 17:36 ` Sinan Kaya
2018-05-25 17:36 ` Sinan Kaya
2018-05-25 17:36 ` Sinan Kaya
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.