aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.h
diff options
context:
space:
mode:
authorMatt Carlson <mcarlson@broadcom.com>2010-02-12 09:47:07 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-12 20:05:52 -0500
commitf89f38b8ec3171664314669a1396ab70b43e8961 (patch)
treed25cbb07060c2089482920f7178b13490103a5fb /drivers/net/tg3.h
parente92967bfb1f4fa7da7c425df9239c4bb615dec30 (diff)
tg3: Unwedge stuck MSI-X vectors
The previous patch changed the code so that new rx buffer submissions to the hardware stall if a new submission would overwrite data needed by an unserviced rx packet. On very busy 5717 and 57765 asic rev devices, there is a corner case where the hardware will fail to assert an MSI-X interrupt for rx traffic. If that vector's interrupt never has another reason to assert, any rx buffers held will never be serviced. If the buffers are never serviced and the hardware consumes all the available rx packets for other rx rings, deadlock will result. The most reliable and least intrusive way to work around the problem is to detect the case where new submissions would overwrite existing data and force all rx interrupt vectors to fire. Signed-off-by: Matt Carlson <mcarlson@broadcom.com> Reviewed-by: Michael Chan <mchan@broadcom.com> Reviewed-by: Benjamin Li <benli@broadcom.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 88a87bb618c0..cc8bf7d6823a 100644
--- a/drivers/net/tg3.h
+++ b/drivers/net/tg3.h
@@ -2699,6 +2699,7 @@ struct tg3 {
2699 struct net_device *dev; 2699 struct net_device *dev;
2700 struct pci_dev *pdev; 2700 struct pci_dev *pdev;
2701 2701
2702 u32 coal_now;
2702 u32 msg_enable; 2703 u32 msg_enable;
2703 2704
2704 /* begin "tx thread" cacheline section */ 2705 /* begin "tx thread" cacheline section */