Skip to content

Commit

Permalink
sfc: Wait for the link to stay up before running loopback selftest
Browse files Browse the repository at this point in the history
It's been observed that some phys (such as the qt2025c) can
do down-up-down-up transitions, presumably as pcs block lock
settles down.

The loopback selftest will start sending data immediately
after the link comes up. Work around this by waiting for
the link state to stay up for two consecutive polls, rather
than one.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Steve Hodgson authored and David S. Miller committed Jun 2, 2010
1 parent cffe9d4 commit 901d3fe
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions drivers/net/sfc/selftest.c
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ efx_test_loopback(struct efx_tx_queue *tx_queue,
static int efx_wait_for_link(struct efx_nic *efx)
{
struct efx_link_state *link_state = &efx->link_state;
int count;
int count, link_up_count = 0;
bool link_up;

for (count = 0; count < 40; count++) {
Expand All @@ -567,8 +567,12 @@ static int efx_wait_for_link(struct efx_nic *efx)
link_up = !efx->mac_op->check_fault(efx);
mutex_unlock(&efx->mac_lock);

if (link_up)
return 0;
if (link_up) {
if (++link_up_count == 2)
return 0;
} else {
link_up_count = 0;
}
}

return -ETIMEDOUT;
Expand Down

0 comments on commit 901d3fe

Please sign in to comment.