r8169: reset chip synchronously in __rtl8169_resume
Triggering an asynchronous reset is problematic for the following reasons, therefore reset the chip synchronously. - The reset routine resets registers and parameters behind our back what may collide with code executed after triggering the reset. - __rtl8169_resume() is called as part of pm_runtime_get_sync() and callers expect that the chip is fully resumed afterwards. In context of this driver triggering an asynchonous reset should be considered an emergency procedure. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>hifive-unleashed-5.1
parent
df320ed7b3
commit
58ba566ccb
|
@ -6787,9 +6787,8 @@ static void __rtl8169_resume(struct net_device *dev)
|
||||||
rtl_lock_work(tp);
|
rtl_lock_work(tp);
|
||||||
napi_enable(&tp->napi);
|
napi_enable(&tp->napi);
|
||||||
set_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
|
set_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
|
||||||
|
rtl_reset_work(tp);
|
||||||
rtl_unlock_work(tp);
|
rtl_unlock_work(tp);
|
||||||
|
|
||||||
rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtl8169_resume(struct device *device)
|
static int rtl8169_resume(struct device *device)
|
||||||
|
|
Loading…
Reference in New Issue