sky2: recovery deadlock fix
Prevent deadlock in sky2 recovery logic. sky2_down calls napi_synchronize which gets stuck if napi was already disabled. Fix by rearranging slightly and not calling napi_disable until after both ports are stopped. The napi_disable probably is being overly paranoid, but it is safe now. Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
4c537e6371
commit
8cfcbe998a
@ -2906,16 +2906,14 @@ static void sky2_restart(struct work_struct *work)
|
||||
int i, err;
|
||||
|
||||
rtnl_lock();
|
||||
sky2_write32(hw, B0_IMSK, 0);
|
||||
sky2_read32(hw, B0_IMSK);
|
||||
napi_disable(&hw->napi);
|
||||
|
||||
for (i = 0; i < hw->ports; i++) {
|
||||
dev = hw->dev[i];
|
||||
if (netif_running(dev))
|
||||
sky2_down(dev);
|
||||
}
|
||||
|
||||
napi_disable(&hw->napi);
|
||||
sky2_write32(hw, B0_IMSK, 0);
|
||||
sky2_reset(hw);
|
||||
sky2_write32(hw, B0_IMSK, Y2_IS_BASE);
|
||||
napi_enable(&hw->napi);
|
||||
|
Loading…
Reference in New Issue
Block a user