]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
bnx2: Fix lost MSI-X problem on 5709 NICs.
authorMichael Chan <mchan@broadcom.com>
Tue, 27 Apr 2010 11:28:09 +0000 (11:28 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 12 May 2010 21:57:14 +0000 (14:57 -0700)
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>
drivers/net/bnx2.c

index 08cddb6ff740f4dfac35677e91424378bcf3b2e9..a9aa957f3a7e6d347426e041ea7ca6bdeeedb764 100644 (file)
@@ -4752,8 +4752,12 @@ bnx2_reset_chip(struct bnx2 *bp, u32 reset_code)
                rc = bnx2_alloc_bad_rbuf(bp);
        }
 
-       if (bp->flags & BNX2_FLAG_USING_MSIX)
+       if (bp->flags & BNX2_FLAG_USING_MSIX) {
                bnx2_setup_msix_tbl(bp);
+               /* Prevent MSIX table reads and write from timing out */
+               REG_WR(bp, BNX2_MISC_ECO_HW_CTL,
+                       BNX2_MISC_ECO_HW_CTL_LARGE_GRC_TMOUT_EN);
+       }
 
        return rc;
 }