]>
Commit | Line | Data |
---|---|---|
00e5a55c BS |
1 | From 0ef00459a638ae4f5d1e5326d3e50232fa80119f Mon Sep 17 00:00:00 2001 |
2 | From: Eilon Greenstein <eilong@broadcom.com> | |
3 | Date: Wed, 14 Jan 2009 21:31:08 -0800 | |
4 | Subject: bnx2x: First slow path interrupt race | |
5 | Acked-by: Karsten Keil <kkeil@novell.com> | |
6 | Reference: bnc#472500 | |
7 | ||
8 | The "read for interrupts" flag must be set before enabling slow-path | |
9 | interrupts as well (and not just before fast-path interrupts) | |
10 | ||
11 | Signed-off-by: Eilon Greenstein <eilong@broadcom.com> | |
12 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
13 | --- | |
14 | drivers/net/bnx2x_main.c | 18 +++++++++--------- | |
15 | 1 files changed, 9 insertions(+), 9 deletions(-) | |
16 | ||
17 | Index: linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c | |
18 | =================================================================== | |
19 | --- linux-2.6.27-bnx2x_2.orig/drivers/net/bnx2x_main.c | |
20 | +++ linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c | |
21 | @@ -4815,6 +4815,15 @@ static void bnx2x_nic_init(struct bnx2x | |
22 | bnx2x_init_context(bp); | |
23 | bnx2x_init_internal(bp, load_code); | |
24 | bnx2x_init_ind_table(bp); | |
25 | + bnx2x_stats_init(bp); | |
26 | + | |
27 | + /* At this point, we are ready for interrupts */ | |
28 | + atomic_set(&bp->intr_sem, 0); | |
29 | + | |
30 | + /* flush all before enabling interrupts */ | |
31 | + mb(); | |
32 | + mmiowb(); | |
33 | + | |
34 | bnx2x_int_enable(bp); | |
35 | } | |
36 | ||
37 | @@ -6423,17 +6432,8 @@ static int bnx2x_nic_load(struct bnx2x * | |
38 | } | |
39 | } | |
40 | ||
41 | - bnx2x_stats_init(bp); | |
42 | - | |
43 | bp->state = BNX2X_STATE_OPENING_WAIT4_PORT; | |
44 | ||
45 | - /* Enable Rx interrupt handling before sending the ramrod | |
46 | - as it's completed on Rx FP queue */ | |
47 | - bnx2x_napi_enable(bp); | |
48 | - | |
49 | - /* Enable interrupt handling */ | |
50 | - atomic_set(&bp->intr_sem, 0); | |
51 | - | |
52 | rc = bnx2x_setup_leading(bp); | |
53 | if (rc) { | |
54 | BNX2X_ERR("Setup leading failed!\n"); |