lkml.org 
[lkml]   [2010]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 7/9] sungem: update gp->reset_task flushing
    Date
    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
    ---
    drivers/net/sungem.c | 12 ++++--------
    1 files changed, 4 insertions(+), 8 deletions(-)

    diff --git a/drivers/net/sungem.c b/drivers/net/sungem.c
    index 4ceb3cf..9e992ca 100644
    --- a/drivers/net/sungem.c
    +++ b/drivers/net/sungem.c
    @@ -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);
    --
    1.7.1


    \
     
     \ /
      Last update: 2010-12-12 16:55    [W:0.021 / U:29.660 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site