]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.drivers/bnx2x-loopback-test-failure.patch
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / bnx2x-loopback-test-failure.patch
CommitLineData
00e5a55c
BS
1From 3910c8ae44c59cebed721e33aa496f0a385b4e03 Mon Sep 17 00:00:00 2001
2From: Eilon Greenstein <eilong@broadcom.com>
3Date: Thu, 22 Jan 2009 06:01:32 +0000
4Subject: bnx2x: loopback test failure
5Acked-by: Karsten Keil <kkeil@novell.com>
6Reference: bnc#472500
7
8A link change interrupt might be queued and activated after the loopback was set
9and it will cause the loopback to fail. The PHY lock should be kept until the
10loopback test is over.
11
12That implies that the bnx2x_test_link should used within the loopback function
13and not bnx2x_wait_for_link since that function also takes the PHY link
14
15Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
16Signed-off-by: David S. Miller <davem@davemloft.net>
17---
18 drivers/net/bnx2x_main.c | 13 +++++++------
19 1 files changed, 7 insertions(+), 6 deletions(-)
20
21Index: linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c
22===================================================================
23--- linux-2.6.27-bnx2x_2.orig/drivers/net/bnx2x_main.c
24+++ linux-2.6.27-bnx2x_2/drivers/net/bnx2x_main.c
25@@ -8753,18 +8753,17 @@ static int bnx2x_run_loopback(struct bnx
26
27 if (loopback_mode == BNX2X_MAC_LOOPBACK) {
28 bp->link_params.loopback_mode = LOOPBACK_BMAC;
29- bnx2x_acquire_phy_lock(bp);
30 bnx2x_phy_init(&bp->link_params, &bp->link_vars);
31- bnx2x_release_phy_lock(bp);
32
33 } else if (loopback_mode == BNX2X_PHY_LOOPBACK) {
34+ u16 cnt = 1000;
35 bp->link_params.loopback_mode = LOOPBACK_XGXS_10;
36- bnx2x_acquire_phy_lock(bp);
37 bnx2x_phy_init(&bp->link_params, &bp->link_vars);
38- bnx2x_release_phy_lock(bp);
39 /* wait until link state is restored */
40- bnx2x_wait_for_link(bp, link_up);
41-
42+ if (link_up)
43+ while (cnt-- && bnx2x_test_link(&bp->link_params,
44+ &bp->link_vars))
45+ msleep(10);
46 } else
47 return -EINVAL;
48
49@@ -8871,6 +8870,7 @@ static int bnx2x_test_loopback(struct bn
50 return BNX2X_LOOPBACK_FAILED;
51
52 bnx2x_netif_stop(bp, 1);
53+ bnx2x_acquire_phy_lock(bp);
54
55 if (bnx2x_run_loopback(bp, BNX2X_MAC_LOOPBACK, link_up)) {
56 DP(NETIF_MSG_PROBE, "MAC loopback failed\n");
57@@ -8882,6 +8882,7 @@ static int bnx2x_test_loopback(struct bn
58 rc |= BNX2X_PHY_LOOPBACK_FAILED;
59 }
60
61+ bnx2x_release_phy_lock(bp);
62 bnx2x_netif_start(bp);
63
64 return rc;