aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMichael Chan <mchan@broadcom.com>2010-04-27 07:28:09 -0400
committerDavid S. Miller <davem@davemloft.net>2010-04-27 17:38:15 -0400
commitc441b8d2cb2194b05550a558d6d95d8944e56a84 (patch)
tree10b43d1a2b35f4e9874c3bb2ac2abe25973270b4 /drivers
parente95ef5d3f6bc60433883e1ef65dac747acd0bf1a (diff)
bnx2: Fix lost MSI-X problem on 5709 NICs.
It has been reported that under certain heavy traffic conditions in MSI-X mode, the driver can lose an MSI-X vector causing all packets in the associated rx/tx ring pair to be dropped. The problem is caused by the chip dropping the write to unmask the MSI-X vector by the kernel (when migrating the IRQ for example). This can be prevented by increasing the GRC timeout value for these register read and write operations. Thanks to Dell for helping us debug this problem. Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/bnx2.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index a257babd1bb4..4c1e51ee8ede 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -4759,8 +4759,12 @@ bnx2_reset_chip(struct bnx2 *bp, u32 reset_code)
4759 rc = bnx2_alloc_bad_rbuf(bp); 4759 rc = bnx2_alloc_bad_rbuf(bp);
4760 } 4760 }
4761 4761
4762 if (bp->flags & BNX2_FLAG_USING_MSIX) 4762 if (bp->flags & BNX2_FLAG_USING_MSIX) {
4763 bnx2_setup_msix_tbl(bp); 4763 bnx2_setup_msix_tbl(bp);
4764 /* Prevent MSIX table reads and write from timing out */
4765 REG_WR(bp, BNX2_MISC_ECO_HW_CTL,
4766 BNX2_MISC_ECO_HW_CTL_LARGE_GRC_TMOUT_EN);
4767 }
4764 4768
4765 return rc; 4769 return rc;
4766} 4770}