mbox series

[0/2] Fix UFS task management command timeout

Message ID 20210929070047.4223-1-powen.kao@mediatek.com (mailing list archive)
Headers show
Series Fix UFS task management command timeout | expand

Message

Po-Wen Kao Sept. 29, 2021, 7 a.m. UTC
On UTP_TASK_REQ_COMPL interrupt, ufshcd_tmc_handler() iterates through
busy requests in tags->rqs and complete request if corresponding
doorbell flag is reset.
However, ufshcd_issue_tm_cmd() allocates requests from tags->static_rqs 
and trigger doorbell directly without dispatching request through block 
layer, thus requests can never be found in tags->rqs and completed 
properly. Any TM command issued by ufshcd_issue_tm_cmd() inevitably 
timeout and further leads to recovery flow failure when LU Reset or 
Abort Task is issued.

In this patch, blk_mq_tagset_busy_iter() call in ufshcd_tmc_handler() 
is replaced with new interface, blk_mq_drv_tagset_busy_iter(), to 
allow completion of request allocted by driver. The new interface is 
introduced for driver to iterate through requests in static_rqs. 

Po-Wen Kao (2):
  blk-mq: new busy request iterator for driver
  scsi: ufs: fix TM request timeout

 block/blk-mq-tag.c        | 36 ++++++++++++++++++++++++++++++------
 drivers/scsi/ufs/ufshcd.c |  2 +-
 include/linux/blk-mq.h    |  4 ++++
 3 files changed, 35 insertions(+), 7 deletions(-)

Comments

Avri Altman Sept. 29, 2021, 7:39 a.m. UTC | #1
> On UTP_TASK_REQ_COMPL interrupt, ufshcd_tmc_handler() iterates through
> busy requests in tags->rqs and complete request if corresponding
> doorbell flag is reset.
> However, ufshcd_issue_tm_cmd() allocates requests from tags->static_rqs
> and trigger doorbell directly without dispatching request through block
> layer, thus requests can never be found in tags->rqs and completed
> properly. Any TM command issued by ufshcd_issue_tm_cmd() inevitably
> timeout and further leads to recovery flow failure when LU Reset or
> Abort Task is issued.
> 
> In this patch, blk_mq_tagset_busy_iter() call in ufshcd_tmc_handler()
> is replaced with new interface, blk_mq_drv_tagset_busy_iter(), to
> allow completion of request allocted by driver. The new interface is
> introduced for driver to iterate through requests in static_rqs.
Is this the same issue that was addressed here - https://www.spinics.net/lists/linux-scsi/msg164520.html ?

Thanks,
Avri

> 
> Po-Wen Kao (2):
>   blk-mq: new busy request iterator for driver
>   scsi: ufs: fix TM request timeout
> 
>  block/blk-mq-tag.c        | 36 ++++++++++++++++++++++++++++++------
>  drivers/scsi/ufs/ufshcd.c |  2 +-
>  include/linux/blk-mq.h    |  4 ++++
>  3 files changed, 35 insertions(+), 7 deletions(-)
> 
> --
> 2.18.0
Po-Wen Kao Sept. 30, 2021, 8:50 a.m. UTC | #2
Hi Avri,

Thanks for reminding. It's exactly the same issue.

Best,
Po-Wen Kao

On Wed, 2021-09-29 at 07:39 +0000, Avri Altman wrote:
> > On UTP_TASK_REQ_COMPL interrupt, ufshcd_tmc_handler() iterates
> > through
> > busy requests in tags->rqs and complete request if corresponding
> > doorbell flag is reset.
> > However, ufshcd_issue_tm_cmd() allocates requests from tags-
> > >static_rqs
> > and trigger doorbell directly without dispatching request through
> > block
> > layer, thus requests can never be found in tags->rqs and completed
> > properly. Any TM command issued by ufshcd_issue_tm_cmd() inevitably
> > timeout and further leads to recovery flow failure when LU Reset or
> > Abort Task is issued.
> > 
> > In this patch, blk_mq_tagset_busy_iter() call in
> > ufshcd_tmc_handler()
> > is replaced with new interface, blk_mq_drv_tagset_busy_iter(), to
> > allow completion of request allocted by driver. The new interface
> > is
> > introduced for driver to iterate through requests in static_rqs.
> 
> Is this the same issue that was addressed here - 
> https://urldefense.com/v3/__https://www.spinics.net/lists/linux-scsi/msg164520.html__;!!CTRNKA9wMg0ARbw!yDkg-AVkMBFsnDBV42HMDgnE51HaEBarK2Tw8z8Di4aC1_7BrRkjIO13nz5rFUk-FA$
> A$  ?
> 
> Thanks,
> Avri
> 
> > 
> > Po-Wen Kao (2):
> >   blk-mq: new busy request iterator for driver
> >   scsi: ufs: fix TM request timeout
> > 
> >  block/blk-mq-tag.c        | 36 ++++++++++++++++++++++++++++++-----
> > -
> >  drivers/scsi/ufs/ufshcd.c |  2 +-
> >  include/linux/blk-mq.h    |  4 ++++
> >  3 files changed, 35 insertions(+), 7 deletions(-)
> > 
> > --
> > 2.18.0
> 
>