[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210929070047.4223-1-powen.kao@mediatek.com>
Date: Wed, 29 Sep 2021 15:00:45 +0800
From: Po-Wen Kao <powen.kao@...iatek.com>
To: <linux-block@...r.kernel.org>, <axboe@...nel.dk>,
<linux-kernel@...r.kernel.org>, <stanley.chu@...iatek.com>,
<linux-scsi@...r.kernel.org>, <martin.petersen@...cle.com>,
<avri.altman@....com>, <alim.akhtar@...sung.com>,
<jejb@...ux.ibm.com>
CC: <peter.wang@...iatek.com>, <chun-hung.wu@...iatek.com>,
<alice.chao@...iatek.com>, <jonathan.hsu@...iatek.com>,
<powen.kao@...iatek.com>, <cc.chou@...iatek.com>,
<chaotian.jing@...iatek.com>, <jiajie.hao@...iatek.com>,
<wsd_upstream@...iatek.com>, <ed.tsai@...iatek.com>
Subject: [PATCH 0/2] Fix UFS task management command timeout
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(-)
--
2.18.0
Powered by blists - more mailing lists