All of lore.kernel.org
 help / color / mirror / Atom feed
From: Po-Wen Kao <powen.kao@mediatek.com>
To: <linux-block@vger.kernel.org>, <axboe@kernel.dk>,
	<linux-kernel@vger.kernel.org>, <stanley.chu@mediatek.com>,
	<linux-scsi@vger.kernel.org>, <martin.petersen@oracle.com>,
	<avri.altman@wdc.com>, <alim.akhtar@samsung.com>,
	<jejb@linux.ibm.com>
Cc: <peter.wang@mediatek.com>, <chun-hung.wu@mediatek.com>,
	<alice.chao@mediatek.com>, <jonathan.hsu@mediatek.com>,
	<powen.kao@mediatek.com>, <cc.chou@mediatek.com>,
	<chaotian.jing@mediatek.com>, <jiajie.hao@mediatek.com>,
	<wsd_upstream@mediatek.com>, <ed.tsai@mediatek.com>
Subject: [PATCH 1/2] blk-mq: new busy request iterator for driver
Date: Wed, 29 Sep 2021 15:00:46 +0800	[thread overview]
Message-ID: <20210929070047.4223-2-powen.kao@mediatek.com> (raw)
In-Reply-To: <20210929070047.4223-1-powen.kao@mediatek.com>

Driver occasionally execute allocated request directly without
dispatching to block layer, thus request never appears in tags->rqs.
To allow driver to iterate through requests in static_rqs, a new
interface blk_mq_drv_tagset_busy_iter() is introduced.

Signed-off-by: Po-Wen Kao <powen.kao@mediatek.com>
---
 block/blk-mq-tag.c     | 36 ++++++++++++++++++++++++++++++------
 include/linux/blk-mq.h |  4 ++++
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
index 86f87346232a..7723689e7714 100644
--- a/block/blk-mq-tag.c
+++ b/block/blk-mq-tag.c
@@ -365,6 +365,31 @@ void blk_mq_all_tag_iter(struct blk_mq_tags *tags, busy_tag_iter_fn *fn,
 
 /**
  * blk_mq_tagset_busy_iter - iterate over all started requests in a tag set
+ * Refer to __blk_mq_tagset_iter() for parameter details.
+ */
+void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset,
+		busy_tag_iter_fn *fn, void *priv)
+{
+	__blk_mq_tagset_iter(tagset, fn, priv,
+			BT_TAG_ITER_STARTED);
+}
+EXPORT_SYMBOL(blk_mq_tagset_busy_iter);
+
+/**
+ * blk_mq_drv_tagset_busy_iter - iterate over all started static requests
+ * in a tag set.
+ * Refer to __blk_mq_tagset_iter() for parameter details.
+ */
+void blk_mq_drv_tagset_busy_iter(struct blk_mq_tag_set *tagset,
+		busy_tag_iter_fn *fn, void *priv)
+{
+	__blk_mq_tagset_iter(tagset, fn, priv,
+			BT_TAG_ITER_STARTED | BT_TAG_ITER_STATIC_RQS);
+}
+EXPORT_SYMBOL(blk_mq_drv_tagset_busy_iter);
+
+/**
+ * blk_mq_tm_tagset_busy_iter - iterate over all requests in a tagset.
  * @tagset:	Tag set to iterate over.
  * @fn:		Pointer to the function that will be called for each started
  *		request. @fn will be called as follows: @fn(rq, @priv,
@@ -375,19 +400,18 @@ void blk_mq_all_tag_iter(struct blk_mq_tags *tags, busy_tag_iter_fn *fn,
  *
  * We grab one request reference before calling @fn and release it after
  * @fn returns.
+ * @flags: BT_TAG_ITER_*
  */
-void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset,
-		busy_tag_iter_fn *fn, void *priv)
+void __blk_mq_tagset_iter(struct blk_mq_tag_set *tagset,
+		busy_tag_iter_fn *fn, void *priv, unsigned int flags)
 {
 	int i;
-
 	for (i = 0; i < tagset->nr_hw_queues; i++) {
 		if (tagset->tags && tagset->tags[i])
-			__blk_mq_all_tag_iter(tagset->tags[i], fn, priv,
-					      BT_TAG_ITER_STARTED);
+			__blk_mq_all_tag_iter(tagset->tags[i], fn, priv, flags);
 	}
 }
-EXPORT_SYMBOL(blk_mq_tagset_busy_iter);
+
 
 static bool blk_mq_tagset_count_completed_rqs(struct request *rq,
 		void *data, bool reserved)
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 13ba1861e688..29c851192093 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -545,6 +545,10 @@ void blk_mq_run_hw_queues(struct request_queue *q, bool async);
 void blk_mq_delay_run_hw_queues(struct request_queue *q, unsigned long msecs);
 void blk_mq_tagset_busy_iter(struct blk_mq_tag_set *tagset,
 		busy_tag_iter_fn *fn, void *priv);
+void blk_mq_drv_tagset_busy_iter(struct blk_mq_tag_set *tagset,
+		busy_tag_iter_fn *fn, void *priv);
+void __blk_mq_tagset_iter(struct blk_mq_tag_set *tagset,
+		busy_tag_iter_fn *fn, void *priv, unsigned int flags);
 void blk_mq_tagset_wait_completed_request(struct blk_mq_tag_set *tagset);
 void blk_mq_freeze_queue(struct request_queue *q);
 void blk_mq_unfreeze_queue(struct request_queue *q);
-- 
2.18.0


  reply	other threads:[~2021-09-29  7:03 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-29  7:00 [PATCH 0/2] Fix UFS task management command timeout Po-Wen Kao
2021-09-29  7:00 ` Po-Wen Kao [this message]
2021-09-29  7:08   ` [PATCH 1/2] blk-mq: new busy request iterator for driver Christoph Hellwig
2021-09-29  7:00 ` [PATCH 2/2] scsi: ufs: fix TM request timeout Po-Wen Kao
2021-09-29  7:39 ` [PATCH 0/2] Fix UFS task management command timeout Avri Altman
2021-09-30  8:50   ` Po-Wen Kao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210929070047.4223-2-powen.kao@mediatek.com \
    --to=powen.kao@mediatek.com \
    --cc=alice.chao@mediatek.com \
    --cc=alim.akhtar@samsung.com \
    --cc=avri.altman@wdc.com \
    --cc=axboe@kernel.dk \
    --cc=cc.chou@mediatek.com \
    --cc=chaotian.jing@mediatek.com \
    --cc=chun-hung.wu@mediatek.com \
    --cc=ed.tsai@mediatek.com \
    --cc=jejb@linux.ibm.com \
    --cc=jiajie.hao@mediatek.com \
    --cc=jonathan.hsu@mediatek.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=peter.wang@mediatek.com \
    --cc=stanley.chu@mediatek.com \
    --cc=wsd_upstream@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.