RE: [PATCH 10/11] scsi: ufs: Optimize the command queueing code

Avri Altman
2021-11-11T07:51:10Z

> On 10/11/2021 02:44, Bart Van Assche wrote:
> > Remove the clock scaling lock from ufshcd_queuecommand() since it is a
> > performance bottleneck. As requested by Asutosh Das, change the
> > behavior of ufshcd_clock_scaling_prepare() from waiting until all
> > pending commands have finished into quiescing request queues. Insert a
> > rcu_read_lock() / rcu_read_unlock() pair in ufshcd_queuecommand() and
> > also in __ufshcd_issue_tm_cmd(). Use synchronize_rcu_expedited() to
> > wait for ongoing command and TMF queueing.
> >
> > Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> > ---
> > drivers/scsi/ufs/ufshcd.c | 121 +++++++++++++-------------------------
> > drivers/scsi/ufs/ufshcd.h | 1 +
> > 2 files changed, 42 insertions(+), 80 deletions(-)
> >
>
> <SNIP>
>
> > @@ -2698,8 +2653,11 @@ static int ufshcd_queuecommand(struct Scsi_Host
> > *host, struct scsi_cmnd *cmd)
> >
> > WARN_ONCE(tag < 0, "Invalid tag %d\n", tag);
> >
> > - if (!down_read_trylock(&hba->clk_scaling_lock))
> > - return SCSI_MLQUEUE_HOST_BUSY;
> > + /*
> > + * Allows ufshcd_clock_scaling_prepare() and also the UFS error handler
> > + * to wait for prior ufshcd_queuecommand() calls.
> > + */
> > + rcu_read_lock();
>
> The improvement to flush/drain ufshcd_queuecommand() via RCU should be a
> separate patch because it is not dependent on the other changes.
Ack on that.

Thanks,
Avri

>
> <SNIP>