aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Chan <mchan@broadcom.com>2010-04-27 07:28:09 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-12 18:02:55 -0400
commit2afddab2958e63289a538985bfd8b584502de37b (patch)
tree7166af07b0af8f64d52869be8deb45d40b249ca5
parent2a2f4e85df27a534760e704d0c84c178928fee1f (diff)
bnx2: Fix lost MSI-X problem on 5709 NICs.
commit c441b8d2cb2194b05550a558d6d95d8944e56a84 upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-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 65df1de447e4..a555c90aae8c 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -4772,8 +4772,12 @@ bnx2_reset_chip(struct bnx2 *bp, u32 reset_code)
4772 rc = bnx2_alloc_bad_rbuf(bp); 4772 rc = bnx2_alloc_bad_rbuf(bp);
4773 } 4773 }
4774 4774
4775 if (bp->flags & BNX2_FLAG_USING_MSIX) 4775 if (bp->flags & BNX2_FLAG_USING_MSIX) {
4776 bnx2_setup_msix_tbl(bp); 4776 bnx2_setup_msix_tbl(bp);
4777 /* Prevent MSIX table reads and write from timing out */
4778 REG_WR(bp, BNX2_MISC_ECO_HW_CTL,
4779 BNX2_MISC_ECO_HW_CTL_LARGE_GRC_TMOUT_EN);
4780 }
4777 4781
4778 return rc; 4782 return rc;
4779} 4783}