diff options
author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2009-07-08 20:09:44 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-07-08 20:09:44 -0700 |
commit | 1b614fb9a00e97b1eab54d4e442d405229c059dd (patch) | |
tree | 3260cee5b11a106e7f4e630171627c6e3e528a0f | |
parent | d2daeabf62a5fb205d413c35cf604021db17536b (diff) | |
download | op-kernel-dev-1b614fb9a00e97b1eab54d4e442d405229c059dd.zip op-kernel-dev-1b614fb9a00e97b1eab54d4e442d405229c059dd.tar.gz |
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>
-rw-r--r-- | net/core/netpoll.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 9675f31..df30feb 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -740,7 +740,7 @@ int netpoll_setup(struct netpoll *np) np->name); break; } - cond_resched(); + msleep(1); } /* If carrier appears to come up instantly, we don't |