X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Fpatches%2Fsuse-2.6.27.31%2Fpatches.drivers%2Fbnx2x-First-slow-path-interrupt-race.patch;fp=src%2Fpatches%2Fsuse-2.6.27.31%2Fpatches.drivers%2Fbnx2x-First-slow-path-interrupt-race.patch;h=5201a7af1c67eb86f27e652c5edac3d908839fda;hb=38e2b028de682e6c22e4249acadbdddd4d8b4b8a;hp=0000000000000000000000000000000000000000;hpb=3a87c0dd202ab6cd1546ce56fca50ef45f561e54;p=people%2Fpmueller%2Fipfire-2.x.git diff --git a/src/patches/suse-2.6.27.31/patches.drivers/bnx2x-First-slow-path-interrupt-race.patch b/src/patches/suse-2.6.27.31/patches.drivers/bnx2x-First-slow-path-interrupt-race.patch new file mode 100644 index 0000000000..5201a7af1c --- /dev/null +++ b/src/patches/suse-2.6.27.31/patches.drivers/bnx2x-First-slow-path-interrupt-race.patch @@ -0,0 +1,54 @@ +From 0ef00459a638ae4f5d1e5326d3e50232fa80119f Mon Sep 17 00:00:00 2001 +From: Eilon Greenstein +Date: Wed, 14 Jan 2009 21:31:08 -0800 +Subject: bnx2x: First slow path interrupt race +Acked-by: Karsten Keil +Reference: bnc#472500 + +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 +Signed-off-by: David S. Miller +--- + drivers/net/bnx2x_main.c | 18 +++++++++--------- + 1 files changed, 9 insertions(+), 9 deletions(-) + +Index: linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c +=================================================================== +--- linux-2.6.27-bnx2x_2.orig/drivers/net/bnx2x_main.c ++++ linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c +@@ -4815,6 +4815,15 @@ static void bnx2x_nic_init(struct bnx2x + bnx2x_init_context(bp); + bnx2x_init_internal(bp, load_code); + bnx2x_init_ind_table(bp); ++ bnx2x_stats_init(bp); ++ ++ /* At this point, we are ready for interrupts */ ++ atomic_set(&bp->intr_sem, 0); ++ ++ /* flush all before enabling interrupts */ ++ mb(); ++ mmiowb(); ++ + bnx2x_int_enable(bp); + } + +@@ -6423,17 +6432,8 @@ static int bnx2x_nic_load(struct bnx2x * + } + } + +- bnx2x_stats_init(bp); +- + bp->state = BNX2X_STATE_OPENING_WAIT4_PORT; + +- /* Enable Rx interrupt handling before sending the ramrod +- as it's completed on Rx FP queue */ +- bnx2x_napi_enable(bp); +- +- /* Enable interrupt handling */ +- atomic_set(&bp->intr_sem, 0); +- + rc = bnx2x_setup_leading(bp); + if (rc) { + BNX2X_ERR("Setup leading failed!\n");