aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@redhat.com>2014-05-01 16:36:31 -0400
committerBjorn Helgaas <bhelgaas@google.com>2014-05-20 17:02:30 -0400
commit3cb30b73ad71b384c6289243d4ccd31ab90bce6f (patch)
tree98d8b75a02fa5c80be2d403a47383f1ac6af8633
parent1a30fd0dba778f7ef1a6254989060a141fca8e23 (diff)
PCI: Mark RTL8110SC INTx masking as broken
INTx masking does not work on this device. To see this, configure the network device UP on an active network, note that the interrupt count continues to increment for the device in /proc/interrupts. Use setpci to set the PCI_COMMAND_INTX_DISABLE bit in the PCI_COMMAND register. As expected, the interrupt count ceases to increment. However, reading the PCI_STATUS_INTERRUPT bit of the PCI_STATUS register does not indicate that interrupts are pending and clearing PCI_COMMAND_INTX_DISABLE in the PCI_COMMAND register does not allow the device to continue operation. This does not affect operation of the host r8169 driver, but it does prevent the device from being functional when assigned to a VM, such as with QEMU and VFIO. The guest driver successfully probes the device, but there is no traffic. Mark INTx masking as broken, allowing the more restrictive APIC masking to be used instead. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r--drivers/pci/quirks.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 5e4ac635368f..72faccfb107c 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -2991,6 +2991,14 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CHELSIO, 0x0030,
2991 quirk_broken_intx_masking); 2991 quirk_broken_intx_masking);
2992DECLARE_PCI_FIXUP_HEADER(0x1814, 0x0601, /* Ralink RT2800 802.11n PCI */ 2992DECLARE_PCI_FIXUP_HEADER(0x1814, 0x0601, /* Ralink RT2800 802.11n PCI */
2993 quirk_broken_intx_masking); 2993 quirk_broken_intx_masking);
2994/*
2995 * Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10)
2996 * Subsystem: Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC
2997 *
2998 * RTL8110SC - Fails under PCI device assignment using DisINTx masking.
2999 */
3000DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_REALTEK, 0x8169,
3001 quirk_broken_intx_masking);
2994 3002
2995static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, 3003static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
2996 struct pci_fixup *end) 3004 struct pci_fixup *end)