lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 166/717] scsi: ufs: Fix clkgating on/off
    Date
    From: Jaegeuk Kim <jaegeuk@kernel.org>

    [ Upstream commit 8eb456be75af7e5a7ac0cd223eaa198cf7ee2ac1 ]

    The following call stack prevents clk_gating at every I/O completion. We
    can remove the condition, ufshcd_any_tag_in_use(), since clkgating_work
    will check it again.

    ufshcd_complete_requests(struct ufs_hba *hba)
    ufshcd_transfer_req_compl()
    __ufshcd_transfer_req_compl()
    __ufshcd_release(hba)
    if (ufshcd_any_tag_in_use() == 1)
    return;
    ufshcd_tmc_handler(hba);
    blk_mq_tagset_busy_iter();

    Note that this still requires work to deal with a potential race condition
    when user sets clkgating.delay_ms to very small value. That can cause
    preventing clkgating by the check of ufshcd_any_tag_in_use() in gate_work.

    Link: https://lore.kernel.org/r/20201117165839.1643377-7-jaegeuk@kernel.org
    Fixes: 7252a3603015 ("scsi: ufs: Avoid busy-waiting by eliminating tag conflicts")
    Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>
    Reviewed-by: Can Guo <cang@codeaurora.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/ufs/ufshcd.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
    index 1ad7d6c130f5b..911aba3e7675c 100644
    --- a/drivers/scsi/ufs/ufshcd.c
    +++ b/drivers/scsi/ufs/ufshcd.c
    @@ -1751,7 +1751,7 @@ static void __ufshcd_release(struct ufs_hba *hba)

    if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended ||
    hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL ||
    - ufshcd_any_tag_in_use(hba) || hba->outstanding_tasks ||
    + hba->outstanding_tasks ||
    hba->active_uic_cmd || hba->uic_async_done ||
    hba->clk_gating.state == CLKS_OFF)
    return;
    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 15:09    [W:3.359 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site