aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/virtio/virtio_pci.c
diff options
context:
space:
mode:
authorMichael S. Tsirkin <mst@redhat.com>2010-06-23 22:49:06 -0600
committerRusty Russell <rusty@rustcorp.com.au>2010-06-23 22:49:07 +0930
commitb03214d559471359e2a85ae256686381d0672f29 (patch)
treeb2c5d617304bffc8dd4917ecef251ec109eb3b8b /drivers/virtio/virtio_pci.c
parent686d363786a53ed28ee875b84ef24e6d5126ef6f (diff)
downloadkernel_samsung_smdk4412-b03214d559471359e2a85ae256686381d0672f29.zip
kernel_samsung_smdk4412-b03214d559471359e2a85ae256686381d0672f29.tar.gz
kernel_samsung_smdk4412-b03214d559471359e2a85ae256686381d0672f29.tar.bz2
virtio-pci: disable msi at startup
virtio-pci resets the device at startup by writing to the status register, but this does not clear the pci config space, specifically msi enable status which affects register layout. This breaks things like kdump when they try to use e.g. virtio-blk. Fix by forcing msi off at startup. Since pci.c already has a routine to do this, we export and use it instead of duplicating code. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Tested-by: Vivek Goyal <vgoyal@redhat.com> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: linux-pci@vger.kernel.org Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Cc: stable@kernel.org
Diffstat (limited to 'drivers/virtio/virtio_pci.c')
-rw-r--r--drivers/virtio/virtio_pci.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c
index 95896f3..ef8d9d5 100644
--- a/drivers/virtio/virtio_pci.c
+++ b/drivers/virtio/virtio_pci.c
@@ -636,6 +636,9 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev,
INIT_LIST_HEAD(&vp_dev->virtqueues);
spin_lock_init(&vp_dev->lock);
+ /* Disable MSI/MSIX to bring device to a known good state. */
+ pci_msi_off(pci_dev);
+
/* enable the device */
err = pci_enable_device(pci_dev);
if (err)