rt2x00: handle spurious pci interrupts
PATCH 1/1 rt2x00: handle spurious pci interrupts
We have documented case of very bad performance issue on rt2800pci device, because it generate spurious interrupt, what cause irq line is disabled: https://bugzilla.redhat.com/show_bug.cgi?id=658451
We already address that problem in separate patch by returning IRQ_HANDLED from interrupt handler. We think similar fix is needed for other rt2x00 PCI devices, because users report performance problems on these devices too.
--- drivers/net/wireless/rt2x00/rt2400pci.c | 2 +- drivers/net/wireless/rt2x00/rt2500pci.c | 2 +- drivers/net/wireless/rt2x00/rt61pci.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
drivers/net/wireless/rt2x00/rt2400pci.c +1 -1
@@ -1380,7 +1380,7 @@ static irqreturn_t rt2400pci_interrupt(int irq, void *dev_instance)rt2x00pci_register_write (rt2x00dev,CSR7 , reg);if (!reg) -return IRQ_NONE ; +return IRQ_HANDLED ;if (!test_bit (DEVICE_STATE_ENABLED_RADIO , &rt2x00dev->flags))return IRQ_HANDLED ;
drivers/net/wireless/rt2x00/rt2500pci.c +1 -1
@@ -1512,7 +1512,7 @@ static irqreturn_t rt2500pci_interrupt(int irq, void *dev_instance)rt2x00pci_register_write (rt2x00dev,CSR7 , reg);if (!reg) -return IRQ_NONE ; +return IRQ_HANDLED ;if (!test_bit (DEVICE_STATE_ENABLED_RADIO , &rt2x00dev->flags))return IRQ_HANDLED ;
drivers/net/wireless/rt2x00/rt61pci.c +1 -1
@@ -2337,7 +2337,7 @@ static irqreturn_t rt61pci_interrupt(int irq, void *dev_instance)rt2x00pci_register_write (rt2x00dev,INT_SOURCE_CSR , reg);if (!reg && !reg_mcu) -return IRQ_NONE ; +return IRQ_HANDLED ;if (!test_bit (DEVICE_STATE_ENABLED_RADIO , &rt2x00dev->flags))return IRQ_HANDLED ;
Signature · 1 line
1.7.1
Quoted 11 lines · Stanislaw Gruszka
We have documented case of very bad performance issue on rt2800pci device, because it generate spurious interrupt, what cause irq line is disabled: https://bugzilla.redhat.com/show_bug.cgi?id=658451
We already address that problem in separate patch by returning
IRQ_HANDLEDfrom interrupt handler. We think similar fix is needed for other rt2x00 PCI devices, because users report performance problems on these devices too.Signed-off-by Stanislaw Gruszka <[email protected]>
Quoted 49 lines
---
drivers/net/wireless/rt2x00/rt2400pci.c | 2 +-drivers/net/wireless/rt2x00/rt2500pci.c| 2 +-drivers/net/wireless/rt2x00/rt61pci.c| 2 +-3 files changed, 3 insertions(+), 3 deletions(-)drivers/net/wireless/rt2x00/rt2400pci.c +1
-1@@ -1380,7 +1380,7 @@ static irqreturn_t rt2400pci_interrupt(int irq, void *dev_instance) rt2x00pci_register_write(rt2x00dev, CSR7, reg); if (!reg) - return IRQ_NONE; + return IRQ_HANDLED; if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) return IRQ_HANDLED;drivers/net/wireless/rt2x00/rt2500pci.c +1
-1@@ -1512,7 +1512,7 @@ static irqreturn_t rt2500pci_interrupt(int irq, void *dev_instance) rt2x00pci_register_write(rt2x00dev, CSR7, reg); if (!reg) - return IRQ_NONE; + return IRQ_HANDLED; if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) return IRQ_HANDLED;drivers/net/wireless/rt2x00/rt61pci.c +1
-2@@ -2337,7 +2337,7 @@ static irqreturn_t rt61pci_interrupt(int irq, void *dev_instance) rt2x00pci_register_write(rt2x00dev, INT_SOURCE_CSR, reg); if (!reg && !reg_mcu) - return IRQ_NONE; + return IRQ_HANDLED; if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) return IRQ_HANDLED; --1.7.1