diff options
author | Stanislaw Gruszka <sgruszka@redhat.com> | 2011-11-16 07:58:42 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-11-17 14:39:30 -0500 |
commit | 23085d5796561625db4143a671f1de081f66ef08 (patch) | |
tree | 2d6e4dafb518ee8cc90983221185c9cc6faf8f81 /drivers/net | |
parent | 4ba7d9997869d25bd223dea7536fc1ce9fab3b3b (diff) |
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.
Cc: stable@vger.kernel.org
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2400pci.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2500pci.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt61pci.c | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c index 3a6b40239bc1..676c7657f5f5 100644 --- a/drivers/net/wireless/rt2x00/rt2400pci.c +++ b/drivers/net/wireless/rt2x00/rt2400pci.c | |||
@@ -1380,7 +1380,7 @@ static irqreturn_t rt2400pci_interrupt(int irq, void *dev_instance) | |||
1380 | rt2x00pci_register_write(rt2x00dev, CSR7, reg); | 1380 | rt2x00pci_register_write(rt2x00dev, CSR7, reg); |
1381 | 1381 | ||
1382 | if (!reg) | 1382 | if (!reg) |
1383 | return IRQ_NONE; | 1383 | return IRQ_HANDLED; |
1384 | 1384 | ||
1385 | if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) | 1385 | if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) |
1386 | return IRQ_HANDLED; | 1386 | return IRQ_HANDLED; |
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c index dcc0e1fcca77..d0b627c6c217 100644 --- a/drivers/net/wireless/rt2x00/rt2500pci.c +++ b/drivers/net/wireless/rt2x00/rt2500pci.c | |||
@@ -1512,7 +1512,7 @@ static irqreturn_t rt2500pci_interrupt(int irq, void *dev_instance) | |||
1512 | rt2x00pci_register_write(rt2x00dev, CSR7, reg); | 1512 | rt2x00pci_register_write(rt2x00dev, CSR7, reg); |
1513 | 1513 | ||
1514 | if (!reg) | 1514 | if (!reg) |
1515 | return IRQ_NONE; | 1515 | return IRQ_HANDLED; |
1516 | 1516 | ||
1517 | if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) | 1517 | if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) |
1518 | return IRQ_HANDLED; | 1518 | return IRQ_HANDLED; |
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c index bf55b4a311e3..9d83e70f3e62 100644 --- a/drivers/net/wireless/rt2x00/rt61pci.c +++ b/drivers/net/wireless/rt2x00/rt61pci.c | |||
@@ -2337,7 +2337,7 @@ static irqreturn_t rt61pci_interrupt(int irq, void *dev_instance) | |||
2337 | rt2x00pci_register_write(rt2x00dev, INT_SOURCE_CSR, reg); | 2337 | rt2x00pci_register_write(rt2x00dev, INT_SOURCE_CSR, reg); |
2338 | 2338 | ||
2339 | if (!reg && !reg_mcu) | 2339 | if (!reg && !reg_mcu) |
2340 | return IRQ_NONE; | 2340 | return IRQ_HANDLED; |
2341 | 2341 | ||
2342 | if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) | 2342 | if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) |
2343 | return IRQ_HANDLED; | 2343 | return IRQ_HANDLED; |