lkml.org 
[lkml]   [2020]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 2/7] scsi: ufs: atomic update for clkgating_enable
    Date
    From: Jaegeuk Kim <jaegeuk@google.com>

    When giving a stress test which enables/disables clkgating, we hit device
    timeout sometimes. This patch avoids subtle racy condition to address it.

    Note that, this requires a patch to address the device stuck by REQ_CLKS_OFF in
    __ufshcd_release().

    The fix is "scsi: ufs: avoid to call REQ_CLKS_OFF to CLKS_OFF".

    Signed-off-by: Jaegeuk Kim <jaegeuk@google.com>
    ---
    drivers/scsi/ufs/ufshcd.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
    index cc8d5f0c3fdc..6c9269bffcbd 100644
    --- a/drivers/scsi/ufs/ufshcd.c
    +++ b/drivers/scsi/ufs/ufshcd.c
    @@ -1808,19 +1808,19 @@ static ssize_t ufshcd_clkgate_enable_store(struct device *dev,
    return -EINVAL;

    value = !!value;
    +
    + spin_lock_irqsave(hba->host->host_lock, flags);
    if (value == hba->clk_gating.is_enabled)
    goto out;

    - if (value) {
    - ufshcd_release(hba);
    - } else {
    - spin_lock_irqsave(hba->host->host_lock, flags);
    + if (value)
    + __ufshcd_release(hba);
    + else
    hba->clk_gating.active_reqs++;
    - spin_unlock_irqrestore(hba->host->host_lock, flags);
    - }

    hba->clk_gating.is_enabled = value;
    out:
    + spin_unlock_irqrestore(hba->host->host_lock, flags);
    return count;
    }

    --
    2.29.2.299.gdc1121823c-goog
    \
     
     \ /
      Last update: 2020-11-17 18:01    [W:4.179 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site