Commit aa13bd6e authored by Ron Mercer's avatar Ron Mercer Committed by David S. Miller

qlge: Fix occasional loopback test failure.

On some servers we see the cleaning of the RX queue finish before all
the loopback packets are sent out.  This delay allows the queues to
settle before checking for successful completion.
Also, delay completion so link has time to come back up.
Signed-off-by: default avatarRon Mercer <ron.mercer@qlogic.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 801e9096
...@@ -503,7 +503,8 @@ static int ql_run_loopback_test(struct ql_adapter *qdev) ...@@ -503,7 +503,8 @@ static int ql_run_loopback_test(struct ql_adapter *qdev)
return -EPIPE; return -EPIPE;
atomic_inc(&qdev->lb_count); atomic_inc(&qdev->lb_count);
} }
/* Give queue time to settle before testing results. */
msleep(2);
ql_clean_lb_rx_ring(&qdev->rx_ring[0], 128); ql_clean_lb_rx_ring(&qdev->rx_ring[0], 128);
return atomic_read(&qdev->lb_count) ? -EIO : 0; return atomic_read(&qdev->lb_count) ? -EIO : 0;
} }
...@@ -536,6 +537,10 @@ static void ql_self_test(struct net_device *ndev, ...@@ -536,6 +537,10 @@ static void ql_self_test(struct net_device *ndev,
data[0] = 0; data[0] = 0;
} }
clear_bit(QL_SELFTEST, &qdev->flags); clear_bit(QL_SELFTEST, &qdev->flags);
/* Give link time to come up after
* port configuration changes.
*/
msleep_interruptible(4 * 1000);
} else { } else {
netif_err(qdev, drv, qdev->ndev, netif_err(qdev, drv, qdev->ndev,
"is down, Loopback test will fail.\n"); "is down, Loopback test will fail.\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment