* [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist
@ 2018-05-28 21:21 Sinan Kaya
2018-05-28 21:21 ` [PATCH V3 2/2] scsi: hpsa: drop shutdown callback Sinan Kaya
2018-05-30 1:49 ` [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist Ryan Finnie
0 siblings, 2 replies; 6+ messages in thread
From: Sinan Kaya @ 2018-05-28 21:21 UTC (permalink / raw)
To: linux-pci, ryan, timur
Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, stable,
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>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=199779
Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
Cc: stable@vger.kernel.org
Reported-by: Ryan Finnie <ryan@finnie.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 cbda0e6..75a00fe 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -477,8 +477,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] 6+ messages in thread* [PATCH V3 2/2] scsi: hpsa: drop shutdown callback
2018-05-28 21:21 [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist Sinan Kaya
@ 2018-05-28 21:21 ` Sinan Kaya
2018-05-30 1:50 ` Ryan Finnie
2018-05-30 1:49 ` [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist Ryan Finnie
1 sibling, 1 reply; 6+ messages in thread
From: Sinan Kaya @ 2018-05-28 21:21 UTC (permalink / raw)
To: linux-pci, ryan, timur
Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, stable, Don Brace,
James E.J. Bottomley, Martin K. Petersen,
open list:HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa),
open list:HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa),
open list
'Commit cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during
shutdown")' has been added to kernel to shutdown pending PCIe port
service interrupts during reboot so that a newly started kexec kernel
wouldn't observe pending interrupts.
pcie_port_device_remove() is disabling the root port and switches by
calling pci_disable_device() after all PCIe service drivers are shutdown.
This has been found to cause crashes on HP DL360 Gen9 machines during
reboot due to hpsa driver not clearing the bus master bit during the
shutdown procedure by calling pci_disable_device().
Drop the shutdown API and do an orderly clean up by using the remove.
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=199779
Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
Cc: stable@vger.kernel.org
Reported-by: Ryan Finnie <ryan@finnie.org>
---
drivers/scsi/hpsa.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index 3a9eca1..3dbef28 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -8970,7 +8970,6 @@ static struct pci_driver hpsa_pci_driver = {
.probe = hpsa_init_one,
.remove = hpsa_remove_one,
.id_table = hpsa_pci_device_id, /* id_table */
- .shutdown = hpsa_shutdown,
.suspend = hpsa_suspend,
.resume = hpsa_resume,
};
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH V3 2/2] scsi: hpsa: drop shutdown callback
2018-05-28 21:21 ` [PATCH V3 2/2] scsi: hpsa: drop shutdown callback Sinan Kaya
@ 2018-05-30 1:50 ` Ryan Finnie
[not found] ` <af772e6434e645f4a42d22821442a3bd@microsemi.com>
0 siblings, 1 reply; 6+ messages in thread
From: Ryan Finnie @ 2018-05-30 1:50 UTC (permalink / raw)
To: Sinan Kaya, linux-pci, timur
Cc: linux-arm-msm, linux-arm-kernel, stable, Don Brace,
James E.J. Bottomley, Martin K. Petersen,
open list:HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa),
open list:HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa),
open list
On 05/28/2018 02:21 PM, Sinan Kaya wrote:
> 'Commit cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during
> shutdown")' has been added to kernel to shutdown pending PCIe port
> service interrupts during reboot so that a newly started kexec kernel
> wouldn't observe pending interrupts.
>
> pcie_port_device_remove() is disabling the root port and switches by
> calling pci_disable_device() after all PCIe service drivers are shutdown.
>
> This has been found to cause crashes on HP DL360 Gen9 machines during
> reboot due to hpsa driver not clearing the bus master bit during the
> shutdown procedure by calling pci_disable_device().
>
> Drop the shutdown API and do an orderly clean up by using the remove.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=199779
> Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
> Cc: stable@vger.kernel.org
> Reported-by: Ryan Finnie <ryan@finnie.org>
Tested successfully on DL360 Gen9 and DL380 Gen9.
Tested-by: Ryan Finnie <ryan@finnie.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist
2018-05-28 21:21 [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist Sinan Kaya
2018-05-28 21:21 ` [PATCH V3 2/2] scsi: hpsa: drop shutdown callback Sinan Kaya
@ 2018-05-30 1:49 ` Ryan Finnie
1 sibling, 0 replies; 6+ messages in thread
From: Ryan Finnie @ 2018-05-30 1:49 UTC (permalink / raw)
To: Sinan Kaya, linux-pci, timur
Cc: linux-arm-msm, linux-arm-kernel, stable, Bjorn Helgaas, open list
On 05/28/2018 02:21 PM, 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>
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=199779
> Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
> Cc: stable@vger.kernel.org
> Reported-by: Ryan Finnie <ryan@finnie.org>
Tested successfully on DL360 Gen9 and DL380 Gen9.
Tested-by: Ryan Finnie <ryan@finnie.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-06-01 13:34 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-28 21:21 [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist Sinan Kaya
2018-05-28 21:21 ` [PATCH V3 2/2] scsi: hpsa: drop shutdown callback Sinan Kaya
2018-05-30 1:50 ` Ryan Finnie
[not found] ` <af772e6434e645f4a42d22821442a3bd@microsemi.com>
2018-05-31 1:08 ` okaya
2018-06-01 13:34 ` Sinan Kaya
2018-05-30 1:49 ` [PATCH V3 1/2] PCI: Try to clean up resources via remove if shutdown doesn't exist Ryan Finnie
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).