Skip to contentSkip to conversation

rt2x00: handle spurious pci interrupts

PATCH In review Stanislaw Gruszka 2 participants 2 messages Nov 16, 2011 Networking drivers (wireless)

lore
Share & tools
lore
#0 lore raw

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
index 3a6b402..676c765 100644
@@ -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
index dcc0e1f..d0b627c 100644
@@ -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
index bf55b4a..9d83e70 100644
@@ -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
Acked-by on v1 1/1
#1 lore raw
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_HANDLED from interrupt handler. We think similar fix is needed for other rt2x00 PCI devices, because users report performance problems on these devices too.

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
index 3a6b402..676c765 100644
@@ -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
index dcc0e1f..d0b627c 100644
@@ -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
index bf55b4a..9d83e70 100644
@@ -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