Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe8998c5 authored by Tejun Heo's avatar Tejun Heo
Browse files

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: default avatarTejun Heo <tj@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org
parent 760141a5
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -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);