[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <7570d6b0-631b-a043-92da-21384b55219b@acm.org>
Date: Mon, 25 Jan 2021 21:05:59 -0800
From: Bart Van Assche <bvanassche@....org>
To: Can Guo <cang@...eaurora.org>, jaegeuk@...nel.org,
asutoshd@...eaurora.org, nguyenb@...eaurora.org,
hongwus@...eaurora.org, linux-scsi@...r.kernel.org,
kernel-team@...roid.com
Cc: Alim Akhtar <alim.akhtar@...sung.com>,
Avri Altman <avri.altman@....com>,
"James E.J. Bottomley" <jejb@...ux.ibm.com>,
"Martin K. Petersen" <martin.petersen@...cle.com>,
Stanley Chu <stanley.chu@...iatek.com>,
Bean Huo <beanhuo@...ron.com>,
open list <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v2] scsi: ufs: Fix some problems in task management
request implementation
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.
Powered by blists - more mailing lists