summaryrefslogtreecommitdiffstats
path: root/drivers/xen/xen-pciback
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2010-03-03 19:38:43 +0100
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-07-20 02:58:31 +0200
commita2be65fd363831502afdf0babdf48149b3959cde (patch)
tree07d69e95d8abb66eca6c13e59ee22dd1e6b6bb20 /drivers/xen/xen-pciback
parentxen/pciback: guest SR-IOV support for PV guest (diff)
downloadlinux-a2be65fd363831502afdf0babdf48149b3959cde.tar.xz
linux-a2be65fd363831502afdf0babdf48149b3959cde.zip
xen/pciback: Disable MSI/MSI-X when reseting a device
In cases where the guest is abruptly killed and has not disabled MSI/MSI-X interrupts we want to do it for it. Otherwise when the guest is started up and enables MSI, we would get a WARN() that the device already had been enabled. Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/xen/xen-pciback')
-rw-r--r--drivers/xen/xen-pciback/pciback_ops.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c
index 2b9a93e1fdee..011db675e437 100644
--- a/drivers/xen/xen-pciback/pciback_ops.c
+++ b/drivers/xen/xen-pciback/pciback_ops.c
@@ -23,6 +23,14 @@ void pciback_reset_device(struct pci_dev *dev)
/* Disable devices (but not bridges) */
if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) {
+#ifdef CONFIG_PCI_MSI
+ /* The guest could have been abruptly killed without
+ * disabling MSI/MSI-X interrupts.*/
+ if (dev->msix_enabled)
+ pci_disable_msix(dev);
+ if (dev->msi_enabled)
+ pci_disable_msi(dev);
+#endif
pci_disable_device(dev);
pci_write_config_word(dev, PCI_COMMAND, 0);