summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Mercer <ron.mercer@qlogic.com>2010-02-17 09:41:23 +0300
committerDavid S. Miller <davem@davemloft.net>2010-02-18 00:35:38 +0300
commitaa13bd6ef4ddd81080f972220fae30eb28f65b17 (patch)
treed9e92fde0111bca92016538988edaddbf578f5be
parent801e9096c566d40d2e7c9903dc902fa01a5a0b36 (diff)
downloadlinux-aa13bd6ef4ddd81080f972220fae30eb28f65b17.tar.xz
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: Ron Mercer <ron.mercer@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/qlge/qlge_ethtool.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/qlge/qlge_ethtool.c b/drivers/net/qlge/qlge_ethtool.c
index 4f26afeb0f38..05b8bde9980d 100644
--- a/drivers/net/qlge/qlge_ethtool.c
+++ b/drivers/net/qlge/qlge_ethtool.c
@@ -503,7 +503,8 @@ static int ql_run_loopback_test(struct ql_adapter *qdev)
return -EPIPE;
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);
return atomic_read(&qdev->lb_count) ? -EIO : 0;
}
@@ -536,6 +537,10 @@ static void ql_self_test(struct net_device *ndev,
data[0] = 0;
}
clear_bit(QL_SELFTEST, &qdev->flags);
+ /* Give link time to come up after
+ * port configuration changes.
+ */
+ msleep_interruptible(4 * 1000);
} else {
netif_err(qdev, drv, qdev->ndev,
"is down, Loopback test will fail.\n");