* [PATCH v1 0/2] ufs: core: fix err handler mcq abort defect @ 2024-08-23 10:07 peter.wang 2024-08-23 10:07 ` [PATCH v1 1/2] ufs: core: complete scsi command after release peter.wang 2024-08-23 10:07 ` [PATCH v1 2/2] ufs: core: force reset after mcq abort all peter.wang 0 siblings, 2 replies; 7+ messages in thread From: peter.wang @ 2024-08-23 10:07 UTC (permalink / raw) To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb Cc: wsd_upstream, linux-mediatek, peter.wang, chun-hung.wu, alice.chao, cc.chou, chaotian.jing, jiajie.hao, powen.kao, qilin.tan, lin.gui, tun-yu.yu, eddie.huang, naomi.chu, chu.stanley From: Peter Wang <peter.wang@mediatek.com> This series fixes ufshcd_err_handler abort defect in mcq mode. Peter Wang (2): ufs: core: complete scsi command after release ufs: core: force reset after mcq abort all drivers/ufs/core/ufshcd.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) -- 2.45.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/2] ufs: core: complete scsi command after release 2024-08-23 10:07 [PATCH v1 0/2] ufs: core: fix err handler mcq abort defect peter.wang @ 2024-08-23 10:07 ` peter.wang 2024-08-23 16:20 ` Bart Van Assche 2024-08-23 10:07 ` [PATCH v1 2/2] ufs: core: force reset after mcq abort all peter.wang 1 sibling, 1 reply; 7+ messages in thread From: peter.wang @ 2024-08-23 10:07 UTC (permalink / raw) To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb Cc: wsd_upstream, linux-mediatek, peter.wang, chun-hung.wu, alice.chao, cc.chou, chaotian.jing, jiajie.hao, powen.kao, qilin.tan, lin.gui, tun-yu.yu, eddie.huang, naomi.chu, chu.stanley, stable From: Peter Wang <peter.wang@mediatek.com> When the error handler successfully aborts a MCQ request, it only releases the command and does not notify the SCSI layer. This may cause another abort after 30 seconds timeout. This patch notifies the SCSI layer to requeue the request. Below is error log [ 14.183804][ T74] ufshcd-mtk 112b0000.ufshci: ufshcd_err_handler started; HBA state eh_non_fatal; powered 1; shutting down 0; saved_err = 4; saved_uic_err = 64; force_reset = 0 [ 14.256164][ T74] ufshcd-mtk 112b0000.ufshci: ufshcd_try_to_abort_task: cmd pending in the device. tag = 19 [ 14.257511][ T74] ufshcd-mtk 112b0000.ufshci: Aborting tag 19 / CDB 0x35 succeeded [ 34.287949][ T8] ufshcd-mtk 112b0000.ufshci: ufshcd_abort: Device abort task at tag 19 [ 34.290514][ T8] ufshcd-mtk 112b0000.ufshci: ufshcd_mcq_abort: skip abort. cmd at tag 19 already completed. Fixes:93e6c0e19d5b ("scsi: ufs: core: Clear cmd if abort succeeds in MCQ mode") Cc: <stable@vger.kernel.org> 6.6.x Signed-off-by: Peter Wang <peter.wang@mediatek.com> --- drivers/ufs/core/ufshcd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 0b3d0c8e0dda..4bcd4e5b62bd 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -6482,8 +6482,12 @@ static bool ufshcd_abort_one(struct request *rq, void *priv) if (!hwq) return 0; spin_lock_irqsave(&hwq->cq_lock, flags); - if (ufshcd_cmd_inflight(lrbp->cmd)) + if (ufshcd_cmd_inflight(lrbp->cmd)) { + struct scsi_cmnd *cmd = lrbp->cmd; + set_host_byte(cmd, DID_REQUEUE); ufshcd_release_scsi_cmd(hba, lrbp); + scsi_done(cmd); + } spin_unlock_irqrestore(&hwq->cq_lock, flags); } -- 2.45.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] ufs: core: complete scsi command after release 2024-08-23 10:07 ` [PATCH v1 1/2] ufs: core: complete scsi command after release peter.wang @ 2024-08-23 16:20 ` Bart Van Assche 2024-08-26 3:41 ` Peter Wang (王信友) 0 siblings, 1 reply; 7+ messages in thread From: Bart Van Assche @ 2024-08-23 16:20 UTC (permalink / raw) To: peter.wang, linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb Cc: wsd_upstream, linux-mediatek, chun-hung.wu, alice.chao, cc.chou, chaotian.jing, jiajie.hao, powen.kao, qilin.tan, lin.gui, tun-yu.yu, eddie.huang, naomi.chu, chu.stanley, stable On 8/23/24 3:07 AM, peter.wang@mediatek.com wrote: > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > index 0b3d0c8e0dda..4bcd4e5b62bd 100644 > --- a/drivers/ufs/core/ufshcd.c > +++ b/drivers/ufs/core/ufshcd.c > @@ -6482,8 +6482,12 @@ static bool ufshcd_abort_one(struct request *rq, void *priv) > if (!hwq) > return 0; > spin_lock_irqsave(&hwq->cq_lock, flags); > - if (ufshcd_cmd_inflight(lrbp->cmd)) > + if (ufshcd_cmd_inflight(lrbp->cmd)) { > + struct scsi_cmnd *cmd = lrbp->cmd; > + set_host_byte(cmd, DID_REQUEUE); > ufshcd_release_scsi_cmd(hba, lrbp); > + scsi_done(cmd); > + } > spin_unlock_irqrestore(&hwq->cq_lock, flags); > } Hmm ... isn't the ufshcd_complete_requests() call in ufshcd_abort_all() expected to complete these commands? Can the above change lead to scsi_done() being called twice, something that is not allowed? Bart. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] ufs: core: complete scsi command after release 2024-08-23 16:20 ` Bart Van Assche @ 2024-08-26 3:41 ` Peter Wang (王信友) 0 siblings, 0 replies; 7+ messages in thread From: Peter Wang (王信友) @ 2024-08-26 3:41 UTC (permalink / raw) To: linux-scsi@vger.kernel.org, bvanassche@acm.org, avri.altman@wdc.com, jejb@linux.ibm.com, alim.akhtar@samsung.com, martin.petersen@oracle.com Cc: linux-mediatek@lists.infradead.org, Jiajie Hao (郝加节), CC Chou (周志杰), Eddie Huang (黃智傑), Alice Chao (趙珮均), wsd_upstream, stable@vger.kernel.org, Lin Gui (桂林), Chun-Hung Wu (巫駿宏), Tun-yu Yu (游敦聿), chu.stanley@gmail.com, Chaotian Jing (井朝天), Powen Kao (高伯文), Naomi Chu (朱詠田), Qilin Tan (谭麒麟) On Fri, 2024-08-23 at 09:20 -0700, Bart Van Assche wrote: > > External email : Please do not click links or open attachments until > you have verified the sender or the content. > On 8/23/24 3:07 AM, peter.wang@mediatek.com wrote: > > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > > index 0b3d0c8e0dda..4bcd4e5b62bd 100644 > > --- a/drivers/ufs/core/ufshcd.c > > +++ b/drivers/ufs/core/ufshcd.c > > @@ -6482,8 +6482,12 @@ static bool ufshcd_abort_one(struct request > *rq, void *priv) > > if (!hwq) > > return 0; > > spin_lock_irqsave(&hwq->cq_lock, flags); > > -if (ufshcd_cmd_inflight(lrbp->cmd)) > > +if (ufshcd_cmd_inflight(lrbp->cmd)) { > > +struct scsi_cmnd *cmd = lrbp->cmd; > > +set_host_byte(cmd, DID_REQUEUE); > > ufshcd_release_scsi_cmd(hba, lrbp); > > +scsi_done(cmd); > > +} > > spin_unlock_irqrestore(&hwq->cq_lock, flags); > > } > > Hmm ... isn't the ufshcd_complete_requests() call in > ufshcd_abort_all() > expected to complete these commands? Can the above change lead to > scsi_done() being called twice, something that is not allowed? > > Bart. > Hi Bart, ufshcd_complete_requests call in ufshcd_abort_all() with force_compl = false in mcq mode, which only check cq is empty or not. For already abort cmd, no response will come back and no cq slot insert by hardware, which we need release this cmd and scsi done, same as force_compl = true does. Thanks Peter ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 2/2] ufs: core: force reset after mcq abort all 2024-08-23 10:07 [PATCH v1 0/2] ufs: core: fix err handler mcq abort defect peter.wang 2024-08-23 10:07 ` [PATCH v1 1/2] ufs: core: complete scsi command after release peter.wang @ 2024-08-23 10:07 ` peter.wang 2024-08-23 16:21 ` Bart Van Assche 1 sibling, 1 reply; 7+ messages in thread From: peter.wang @ 2024-08-23 10:07 UTC (permalink / raw) To: linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb Cc: wsd_upstream, linux-mediatek, peter.wang, chun-hung.wu, alice.chao, cc.chou, chaotian.jing, jiajie.hao, powen.kao, qilin.tan, lin.gui, tun-yu.yu, eddie.huang, naomi.chu, chu.stanley From: Peter Wang <peter.wang@mediatek.com> In mcq mode gerneal case, cq (head/tail) poniter is same as sq pointer (head/tail) if the hwq is empty. But if command send to device and abort it, no response return and cq point will less than sq. In this case will have unpredictable error. This patch force reset for this case. Below is error log [ 34.976612][ C3] ufshcd-mtk 112b0000.ufshci: OCS error from controller = 3 for tag 19 Signed-off-by: Peter Wang <peter.wang@mediatek.com> --- drivers/ufs/core/ufshcd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 4bcd4e5b62bd..d9ef8f0279da 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -6519,6 +6519,8 @@ static bool ufshcd_abort_all(struct ufs_hba *hba) /* Complete the requests that are cleared by s/w */ ufshcd_complete_requests(hba, false); + if (is_mcq_enabled(hba)) + return true; return ret != 0; } -- 2.45.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/2] ufs: core: force reset after mcq abort all 2024-08-23 10:07 ` [PATCH v1 2/2] ufs: core: force reset after mcq abort all peter.wang @ 2024-08-23 16:21 ` Bart Van Assche 2024-08-26 3:42 ` Peter Wang (王信友) 0 siblings, 1 reply; 7+ messages in thread From: Bart Van Assche @ 2024-08-23 16:21 UTC (permalink / raw) To: peter.wang, linux-scsi, martin.petersen, avri.altman, alim.akhtar, jejb Cc: wsd_upstream, linux-mediatek, chun-hung.wu, alice.chao, cc.chou, chaotian.jing, jiajie.hao, powen.kao, qilin.tan, lin.gui, tun-yu.yu, eddie.huang, naomi.chu, chu.stanley On 8/23/24 3:07 AM, peter.wang@mediatek.com wrote: > In mcq mode gerneal case, cq (head/tail) poniter is same as > sq pointer (head/tail) if the hwq is empty. poniter -> pointer Thanks, Bart. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/2] ufs: core: force reset after mcq abort all 2024-08-23 16:21 ` Bart Van Assche @ 2024-08-26 3:42 ` Peter Wang (王信友) 0 siblings, 0 replies; 7+ messages in thread From: Peter Wang (王信友) @ 2024-08-26 3:42 UTC (permalink / raw) To: linux-scsi@vger.kernel.org, bvanassche@acm.org, avri.altman@wdc.com, jejb@linux.ibm.com, alim.akhtar@samsung.com, martin.petersen@oracle.com Cc: linux-mediatek@lists.infradead.org, Jiajie Hao (郝加节), CC Chou (周志杰), Eddie Huang (黃智傑), Alice Chao (趙珮均), wsd_upstream, Lin Gui (桂林), Chun-Hung Wu (巫駿宏), Tun-yu Yu (游敦聿), chu.stanley@gmail.com, Chaotian Jing (井朝天), Powen Kao (高伯文), Naomi Chu (朱詠田), Qilin Tan (谭麒麟) On Fri, 2024-08-23 at 09:21 -0700, Bart Van Assche wrote: > > External email : Please do not click links or open attachments until > you have verified the sender or the content. > On 8/23/24 3:07 AM, peter.wang@mediatek.com wrote: > > In mcq mode gerneal case, cq (head/tail) poniter is same as > > sq pointer (head/tail) if the hwq is empty. > > poniter -> pointer > > Thanks, > > Bart. Hi Bart, Will fix typo next version. Thanks. Peter ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-08-26 3:42 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-08-23 10:07 [PATCH v1 0/2] ufs: core: fix err handler mcq abort defect peter.wang 2024-08-23 10:07 ` [PATCH v1 1/2] ufs: core: complete scsi command after release peter.wang 2024-08-23 16:20 ` Bart Van Assche 2024-08-26 3:41 ` Peter Wang (王信友) 2024-08-23 10:07 ` [PATCH v1 2/2] ufs: core: force reset after mcq abort all peter.wang 2024-08-23 16:21 ` Bart Van Assche 2024-08-26 3:42 ` Peter Wang (王信友)
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox