PCI: quirk RTL8110SC INTx masking
PATCH 1/1 PCI: quirk RTL8110SC INTx masking
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.
--- drivers/pci/quirks.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/pci/quirks.c +8 -0
@@ -2991,6 +2991,14 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CHELSIO, 0x0030, quirk_broken_intx_masking);DECLARE_PCI_FIXUP_HEADER (0x1814 ,0x0601 ,/* Ralink RT2800 802.11n PCI */ quirk_broken_intx_masking); +/* +* Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10) +* Subsystem: Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC +* +* RTL8110SC - Fails under PCI device assignment using DisINTx masking. +*/ +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_REALTEK ,0x8169 , + quirk_broken_intx_masking);static void pci_do_fixups (struct pci_dev *dev,struct pci_fixup *f,struct pci_fixup *end)
Quoted 10 lines · Alex Williamson
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 thePCI_COMMAND_INTX_DISABLEbit in thePCI_COMMANDregister. As expected, the interrupt count ceases to increment. However, reading thePCI_STATUS_INTERRUPTbit of thePCI_STATUSregister does not indicate that interrupts are pending and clearingPCI_COMMAND_INTX_DISABLEin thePCI_COMMANDregister does not allow the device to continue operation.
Quoted 7 lines
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 <[email protected]>
Applied to pci/virtualization for v3.16, thanks.
Quoted 28 lines
--- drivers/pci/quirks.c | 8 ++++++++ 1 file changed, 8 insertions(+)drivers/pci/quirks.c +8
-1@@ -2991,6 +2991,14 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CHELSIO, 0x0030, quirk_broken_intx_masking);DECLARE_PCI_FIXUP_HEADER (0x1814 ,0x0601 ,/* Ralink RT2800 802.11n PCI */ quirk_broken_intx_masking); +/* +* Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10) +* Subsystem: Realtek RTL8169/8110 Family PCI Gigabit Ethernet NIC +* +* RTL8110SC - Fails under PCI device assignment using DisINTx masking. +*/ +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_REALTEK ,0x8169 , + quirk_broken_intx_masking);static void pci_do_fixups (struct pci_dev *dev,struct pci_fixup *f,struct pci_fixup *end) --To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html