[PATCH v6 04/10] PCI/MSI: Don't disable MSI/MSI-X at shutdown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Michael S. Tsirkin <mst@xxxxxxxxxx>

d52877c7b1af ("pci/irq: let pci_device_shutdown to call pci_msi_shutdown
v2") disabled MSI/MSI-X at device shutdown to address a kexec problem.

The problem is that after we disable MSI, the device may assert INTx, and
if the driver hasn't registered an interrupt handler for it, the interrupt
is never deasserted and causes a kernel hang.  In particular, this was
observed with virtio.

We now disable MSI/MSI-X for all devices during enumeration regardless of
CONFIG_PCI_MSI.  This solves the kexec problem in the new kernel, not the
old one.

Stop disabling MSIs at shutdown to avoid the kernel hang.

XXX bugzilla reference, details about how the hang happens?

[bhelgaas: changelog]
Reported-by: Fam Zheng <famz@xxxxxxxxxx>
Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
CC: Yinghai Lu <yhlu.kernel.send@xxxxxxxxx>
CC: Ulrich Obergfell <uobergfe@xxxxxxxxxx>
CC: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
---
 drivers/pci/pci-driver.c |    2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 3cb2210de553..38a602cb9fb7 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -450,8 +450,6 @@ static void pci_device_shutdown(struct device *dev)
 
 	if (drv && drv->shutdown)
 		drv->shutdown(pci_dev);
-	pci_msi_shutdown(pci_dev);
-	pci_msix_shutdown(pci_dev);
 
 #ifdef CONFIG_KEXEC
 	/*

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux