lkml.org 
[lkml]   [2021]   [Jan]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v2] scsi: ufs: Fix some problems in task management request implementation
    From
    Date
    On 1/20/21 7:23 PM, Can Guo wrote:
    > Current task management request send/compl implementation is broken, the
    > problems and fixes are listed as below:
    >
    > Problem: TMR completion timeout. ufshcd_tmc_handler() calls
    > blk_mq_tagset_busy_iter(fn == ufshcd_compl_tm()), but since
    > blk_mq_tagset_busy_iter() only iterates over all reserved tags and
    > started requests, so ufshcd_compl_tm() never gets a chance to run.
    > Fix: Call blk_mq_start_request() in __ufshcd_issue_tm_cmd().
    >
    > Problem: Race condition in send/compl paths. ufshcd_compl_tm() looks for
    > all 0 bits in the REG_UTP_TASK_REQ_DOOR_BELL and call complete()
    > for each req who has the req->end_io_data set. There can be a race
    > condition btw tmc send/compl, because req->end_io_data is set, in
    > __ufshcd_issue_tm_cmd(), without host lock protection, so it is
    > possible that when ufshcd_compl_tm() checks the req->end_io_data,
    > req->end_io_data is set but the corresponding tag has not been set
    > in the REG_UTP_TASK_REQ_DOOR_BELL. Thus, ufshcd_tmc_handler() may
    > wrongly complete TMRs which have not been sent.
    > Fix: Protect req->end_io_data with host lock. And let ufshcd_compl_tm()
    > only handle those tm cmds which have been completed instead of
    > looking for 0 bits in the REG_UTP_TASK_REQ_DOOR_BELL.
    >
    > Problem: In __ufshcd_issue_tm_cmd(), it is not right to use hba->nutrs +
    > req->tag as the Task Tag in one TMR UPIU.
    > Fix: Directly use req->tag as Task Tag.

    Please split this patch into three separate patches - one patch per
    problem that has been described above.

    Thanks,

    Bart.

    \
     
     \ /
      Last update: 2021-01-27 02:11    [W:3.538 / U:0.724 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site