netpoll: Fix carrier detection for drivers that are using phylib
Using early netconsole and gianfar driver this error pops up: netconsole: timeout waiting for carrier It appears that net/core/netpoll.c:netpoll_setup() is using cond_resched() in a loop waiting for a carrier. The thing is that cond_resched() is a no-op when system_state != SYSTEM_RUNNING, and so drivers/net/phy/phy.c's state_queue is never scheduled, therefore link detection doesn't work. I belive that the main problem is in cond_resched()[1], but despite how the cond_resched() story ends, it might be a good idea to call msleep(1) instead of cond_resched(), as suggested by Andrew Morton. [1] http://lkml.org/lkml/2009/7/7/463 Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d2daeabf62
commit
1b614fb9a0
|
@ -740,7 +740,7 @@ int netpoll_setup(struct netpoll *np)
|
||||||
np->name);
|
np->name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
cond_resched();
|
msleep(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If carrier appears to come up instantly, we don't
|
/* If carrier appears to come up instantly, we don't
|
||||||
|
|
Loading…
Reference in New Issue