Sometimes ucc_geth fails to suspend with the following trace:
ucc_geth
e0103000.ucc: suspend
ucc_geth
e0102000.ucc: suspend
NETDEV WATCHDOG: eth0 (ucc_geth): transmit queue 0 timed out
------------[ cut here ]------------
Badness at net/sched/sch_generic.c:255
NIP:
c021cb5c LR:
c021cb5c CTR:
c01ab4b4
[...]
NIP [
c021cb5c] dev_watchdog+0x298/0x2a8
LR [
c021cb5c] dev_watchdog+0x298/0x2a8
Call Trace:
[
c0389da0] [
c021cb5c] dev_watchdog+0x298/0x2a8 (unreliable)
[
c0389e00] [
c0031ed8] run_timer_softirq+0x16c/0x1dc
[
c0389e50] [
c002c638] __do_softirq+0xa4/0x11c
[...]
This patch fixes the issue by properly detaching the device on
suspend, and attaching it back on resume.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
if (!netif_running(ndev))
return 0;
+ netif_device_detach(ndev);
napi_disable(&ugeth->napi);
/*
phy_start(ugeth->phydev);
napi_enable(&ugeth->napi);
- netif_start_queue(ndev);
+ netif_device_attach(ndev);
return 0;
}