Commit 58980df7 authored by Bart Van Assche's avatar Bart Van Assche Committed by Bart Van Assche
Browse files

FROMLIST: scsi: ufs: Increase the usable queue depth



With the current implementation of the UFS driver active_queues is 1
instead of 0 if all UFS request queues are idle. That causes
hctx_may_queue() to divide the queue depth by 2 when queueing a request
and hence reduces the usable queue depth.

The shared tag set code in the block layer keeps track of the number of
active request queues. blk_mq_tag_busy() is called before a request is
queued onto a hwq and blk_mq_tag_idle() is called some time after the hwq
became idle. blk_mq_tag_idle() is called from inside blk_mq_timeout_work().
Hence, blk_mq_tag_idle() is only called if a timer is associated with each
request that is submitted to a request queue that shares a tag set with
another request queue. Hence this patch that adds a blk_mq_start_request()
call in ufshcd_exec_dev_cmd(). This patch doubles the queue depth on my
test setup from 16 to 32.

In addition to increasing the usable queue depth, also fix the
documentation of the 'timeout' parameter in the header above
ufshcd_exec_dev_cmd().

Reviewed-by: default avatarCan Guo <cang@codeaurora.org>
Cc: Can Guo <cang@codeaurora.org>
Cc: Alim Akhtar <alim.akhtar@samsung.com>
Cc: Avri Altman <avri.altman@wdc.com>
Cc: Stanley Chu <stanley.chu@mediatek.com>
Cc: Bean Huo <beanhuo@micron.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Fixes: 7252a360 ("scsi: ufs: Avoid busy-waiting by eliminating tag conflicts")
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Bug: 181696921
Link: https://lore.kernel.org/linux-scsi/73c8d76ca8af028f27bde8b74f7d0dbd@codeaurora.org/T/#mba1ee0ef173b92c8ea402418bef7b97ae90b731a


Change-Id: I31da96894dedfdbc40003d227bb18361e5dda702
Signed-off-by: default avatarBart Van Assche <bvanassche@google.com>
parent 8b1ed752
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment