]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
virtio-pci: disable msi at startup
authorMichael S. Tsirkin <mst@redhat.com>
Thu, 24 Jun 2010 04:49:06 +0000 (22:49 -0600)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 2 Aug 2010 17:20:42 +0000 (10:20 -0700)
commit b03214d559471359e2a85ae256686381d0672f29 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/pci/pci.c
drivers/virtio/virtio_pci.c

index 595d03ae192197467c2059834a68dad75cdf5d27..812d4ac6bd2fbe4ed04e28f010ebaea8508a7c65 100644 (file)
@@ -2046,6 +2046,7 @@ void pci_msi_off(struct pci_dev *dev)
                pci_write_config_word(dev, pos + PCI_MSIX_FLAGS, control);
        }
 }
+EXPORT_SYMBOL_GPL(pci_msi_off);
 
 #ifndef HAVE_ARCH_PCI_SET_DMA_MASK
 /*
index 7127bfe2ac4341580bbd1b4c0467079a2bb3d362..d43859f76db248a39a23d39cdb47d73aca8e5393 100644 (file)
@@ -635,6 +635,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)