*/
        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);
                /* 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);