• Bart Van Assche's avatar
    scsi: ufs: core: Increase the usable queue depth · d0b2b70e
    Bart Van Assche authored
    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@acm.org
    Fixes: 7252a360 ("scsi: ufs: Avoid busy-waiting by eliminating tag conflicts")
    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>
    Reviewed-by: default avatarCan Guo <cang@codeaurora.org>
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    d0b2b70e
ufshcd.c 253 KB