diff options
author | Eilon Greenstein <eilong@broadcom.com> | 2009-01-15 00:31:08 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-01-15 11:28:17 -0500 |
commit | 0ef00459a638ae4f5d1e5326d3e50232fa80119f (patch) | |
tree | 1c0568c4aef5c9b87141dc89710454eb99886d34 | |
parent | e7799c5f79072b5b34cf08170f142bcb8569cfff (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>
-rw-r--r-- | drivers/net/bnx2x_main.c | 18 |
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"); |