aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.h
diff options
context:
space:
mode:
authorMatt Carlson <mcarlson@broadcom.com>2009-04-20 02:55:01 -0400
committerDavid S. Miller <davem@davemloft.net>2009-04-21 04:41:00 -0400
commit624f8e5082efd0348ccf7e3d3f4bfc41efead26c (patch)
treebd6bfc88f62b49fc377101b4f268b0b00b101ea7 /drivers/net/tg3.h
parente5e9743bb7429f53c83ad69b432f7b661e74c3f0 (diff)
tg3: Allow screaming interrupt detection
The tg3 driver's ISR is coded to accept interrupts as its own if the status block tag does not equal the last tag the driver has seen. The last_tag field is updated from tg3_poll. In a screaming interrupt situation from another device sharing tg3's IRQ, tg3_poll does not get a chance to be called, so the last_tag will always be out of sync with the status block tag. Consequently, the driver will continually declare the screaming interrupts as its own, thus thwarting the screaming interrupt detection logic. This patch solves the problem by creating a new last_irq_tag member and recording the status block tag in the ISR. The ISR then checks the last_irq_tag for interrupt ownership. Many thanks to John Marvin for the detailed bug report and analysis and Michael Chan for the bugfix. Signed-off-by: Matt Carlson <mcarlson@broadcom.com> Signed-off-by: Michael Chan <mchan@broadcom.com> Tested-by: John Marvin <jsm@fc.hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/tg3.h')
-rw-r--r--drivers/net/tg3.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
index cb4c62abdd21..ca71a49a3fd5 100644
--- a/drivers/net/tg3.h
+++ b/drivers/net/tg3.h
@@ -2501,6 +2501,7 @@ struct tg3 {
2501 struct tg3_hw_status *hw_status; 2501 struct tg3_hw_status *hw_status;
2502 dma_addr_t status_mapping; 2502 dma_addr_t status_mapping;
2503 u32 last_tag; 2503 u32 last_tag;
2504 u32 last_irq_tag;
2504 2505
2505 u32 msg_enable; 2506 u32 msg_enable;
2506 2507