bnx2x: Stop loading if error condition detected
authorEilon Greenstein <eilong@broadcom.com>
Wed, 12 Aug 2009 08:23:31 +0000 (08:23 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 13 Aug 2009 06:02:48 +0000 (23:02 -0700)
Signed-off-by: Benjamin Li <benli@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bnx2x.h
drivers/net/bnx2x_main.c

index 004f4a8e1649305b6c89e6558be4389c80572f1d..633acca4a988be40e971db078bff998d02e23821 100644 (file)
@@ -89,6 +89,7 @@
        } while (0)
 #else
 #define bnx2x_panic() do { \
+               bp->panic = 1; \
                BNX2X_ERR("driver assert\n"); \
                bnx2x_panic_dump(bp); \
        } while (0)
index 8e77e933ac185d54927a10869c5bb0e5724b0342..c289670a55afd51ca73f31b250db542ab444b85e 100644 (file)
@@ -7109,6 +7109,9 @@ static int bnx2x_wait_ramrod(struct bnx2x *bp, int state, int idx,
                }
 
                msleep(1);
+
+               if (bp->panic)
+                       return -EIO;
        }
 
        /* timeout! */
@@ -7373,7 +7376,12 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
        rc = bnx2x_setup_leading(bp);
        if (rc) {
                BNX2X_ERR("Setup leading failed!\n");
+#ifndef BNX2X_STOP_ON_ERROR
                goto load_error3;
+#else
+               bp->panic = 1;
+               return -EBUSY;
+#endif
        }
 
        if (CHIP_IS_E1H(bp))