ucc_geth: Fix netdev watchdog triggering on suspend
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>
This commit is contained in:
parent
2f5cb43406
commit
29fb00e047
|
@ -3607,6 +3607,7 @@ static int ucc_geth_suspend(struct of_device *ofdev, pm_message_t state)
|
||||||
if (!netif_running(ndev))
|
if (!netif_running(ndev))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
netif_device_detach(ndev);
|
||||||
napi_disable(&ugeth->napi);
|
napi_disable(&ugeth->napi);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3665,7 +3666,7 @@ static int ucc_geth_resume(struct of_device *ofdev)
|
||||||
phy_start(ugeth->phydev);
|
phy_start(ugeth->phydev);
|
||||||
|
|
||||||
napi_enable(&ugeth->napi);
|
napi_enable(&ugeth->napi);
|
||||||
netif_start_queue(ndev);
|
netif_device_attach(ndev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue