forked from Minki/linux
sungem: update gp->reset_task flushing
gp->reset_task_pending is always set right before reset_task is scheduled and as there is no synchronization between the setting and scheduling, busy looping on reset_task_pending before flushing reset_task doesn't really buy anything. Directly flush gp->reset_task on suspend and cancel on detach. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: netdev@vger.kernel.org
This commit is contained in:
parent
760141a53e
commit
fe8998c5e3
@ -2380,10 +2380,8 @@ static int gem_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||
*/
|
||||
mutex_unlock(&gp->pm_mutex);
|
||||
|
||||
/* Wait for a pending reset task to complete */
|
||||
while (gp->reset_task_pending)
|
||||
yield();
|
||||
flush_scheduled_work();
|
||||
/* Wait for the pending reset task to complete */
|
||||
flush_work_sync(&gp->reset_task);
|
||||
|
||||
/* Shut the PHY down eventually and setup WOL */
|
||||
gem_stop_phy(gp, gp->asleep_wol);
|
||||
@ -2928,10 +2926,8 @@ static void gem_remove_one(struct pci_dev *pdev)
|
||||
/* We shouldn't need any locking here */
|
||||
gem_get_cell(gp);
|
||||
|
||||
/* Wait for a pending reset task to complete */
|
||||
while (gp->reset_task_pending)
|
||||
yield();
|
||||
flush_scheduled_work();
|
||||
/* Cancel reset task */
|
||||
cancel_work_sync(&gp->reset_task);
|
||||
|
||||
/* Shut the PHY down */
|
||||
gem_stop_phy(gp, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user