aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x_main.c
diff options
context:
space:
mode:
authorEilon Greenstein <eilong@broadcom.com>2009-01-15 00:31:08 -0500
committerDavid S. Miller <davem@davemloft.net>2009-01-15 11:28:17 -0500
commit0ef00459a638ae4f5d1e5326d3e50232fa80119f (patch)
tree1c0568c4aef5c9b87141dc89710454eb99886d34 /drivers/net/bnx2x_main.c
parente7799c5f79072b5b34cf08170f142bcb8569cfff (diff)
bnx2x: First slow path interrupt race
The "read for interrupts" flag must be set before enabling slow-path interrupts as well (and not just before fast-path interrupts) Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x_main.c')
-rw-r--r--drivers/net/bnx2x_main.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c
index b573951600de..7c533797c064 100644
--- a/drivers/net/bnx2x_main.c
+++ b/drivers/net/bnx2x_main.c
@@ -4812,6 +4812,15 @@ static void bnx2x_nic_init(struct bnx2x *bp, u32 load_code)
4812 bnx2x_init_context(bp); 4812 bnx2x_init_context(bp);
4813 bnx2x_init_internal(bp, load_code); 4813 bnx2x_init_internal(bp, load_code);
4814 bnx2x_init_ind_table(bp); 4814 bnx2x_init_ind_table(bp);
4815 bnx2x_stats_init(bp);
4816
4817 /* At this point, we are ready for interrupts */
4818 atomic_set(&bp->intr_sem, 0);
4819
4820 /* flush all before enabling interrupts */
4821 mb();
4822 mmiowb();
4823
4815 bnx2x_int_enable(bp); 4824 bnx2x_int_enable(bp);
4816} 4825}
4817 4826
@@ -6420,17 +6429,8 @@ static int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
6420 } 6429 }
6421 } 6430 }
6422 6431
6423 bnx2x_stats_init(bp);
6424
6425 bp->state = BNX2X_STATE_OPENING_WAIT4_PORT; 6432 bp->state = BNX2X_STATE_OPENING_WAIT4_PORT;
6426 6433
6427 /* Enable Rx interrupt handling before sending the ramrod
6428 as it's completed on Rx FP queue */
6429 bnx2x_napi_enable(bp);
6430
6431 /* Enable interrupt handling */
6432 atomic_set(&bp->intr_sem, 0);
6433
6434 rc = bnx2x_setup_leading(bp); 6434 rc = bnx2x_setup_leading(bp);
6435 if (rc) { 6435 if (rc) {
6436 BNX2X_ERR("Setup leading failed!\n"); 6436 BNX2X_ERR("Setup leading failed!\n");