Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tg3: Fix soft lockup when tg3_reset_task() fails.
If tg3_reset_task() fails, the device state is left in an inconsistent state with IFF_RUNNING still set but NAPI state not enabled. A subsequent operation, such as ifdown or AER error can cause it to soft lock up when it tries to disable NAPI state. Fix it by bringing down the device to !IFF_RUNNING state when tg3_reset_task() fails. tg3_reset_task() running from workqueue will now call tg3_close() when the reset fails. We need to modify tg3_reset_task_cancel() slightly to avoid tg3_close() calling cancel_work_sync() to cancel tg3_reset_task(). Otherwise cancel_work_sync() will wait forever for tg3_reset_task() to finish. Reported-by: David Christensen <[email protected]> Reported-by: Baptiste Covolato <[email protected]> Fixes: db21997 ("tg3: Schedule at most one tg3_reset_task run") Signed-off-by: Michael Chan <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information