Patch "scsi: ufs: core: Increase the usable queue depth" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    scsi: ufs: core: Increase the usable queue depth

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     scsi-ufs-core-increase-the-usable-queue-depth.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 28aec93aaa53b23b0ac9190aab1883a68d643246
Author: Bart Van Assche <bvanassche@xxxxxxx>
Date:   Thu May 13 09:49:12 2021 -0700

    scsi: ufs: core: Increase the usable queue depth
    
    [ Upstream commit d0b2b70eb12e9ffaf95e11b16b230a4e015a536c ]
    
    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.
    
    Adds a blk_mq_start_request() call in ufshcd_exec_dev_cmd(). This 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().
    
    Link: https://lore.kernel.org/r/20210513164912.5683-1-bvanassche@xxxxxxx
    Fixes: 7252a3603015 ("scsi: ufs: Avoid busy-waiting by eliminating tag conflicts")
    Cc: Can Guo <cang@xxxxxxxxxxxxxx>
    Cc: Alim Akhtar <alim.akhtar@xxxxxxxxxxx>
    Cc: Avri Altman <avri.altman@xxxxxxx>
    Cc: Stanley Chu <stanley.chu@xxxxxxxxxxxx>
    Cc: Bean Huo <beanhuo@xxxxxxxxxx>
    Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
    Reviewed-by: Can Guo <cang@xxxxxxxxxxxxxx>
    Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
    Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 25112c2fe2db..0429ba5d7d23 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -2615,7 +2615,7 @@ static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
  * ufshcd_exec_dev_cmd - API for sending device management requests
  * @hba: UFS hba
  * @cmd_type: specifies the type (NOP, Query...)
- * @timeout: time in seconds
+ * @timeout: timeout in milliseconds
  *
  * NOTE: Since there is only one available tag for device management commands,
  * it is expected you hold the hba->dev_cmd.lock mutex.
@@ -2645,6 +2645,9 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba,
 	}
 	tag = req->tag;
 	WARN_ON_ONCE(!ufshcd_valid_tag(hba, tag));
+	/* Set the timeout such that the SCSI error handler is not activated. */
+	req->timeout = msecs_to_jiffies(2 * timeout);
+	blk_mq_start_request(req);
 
 	init_completion(&wait);
 	lrbp = &hba->lrb[tag];



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux