On Tue, 29 Aug 2023 at 04:05, Wenchao Chen <wenchao.chen@xxxxxxxxxx> wrote: > > Increasing hsq_depth improves random write performance. > > Signed-off-by: Wenchao Chen <wenchao.chen@xxxxxxxxxx> > --- > drivers/mmc/host/mmc_hsq.c | 27 +++++++++++++++++++++++++++ > drivers/mmc/host/mmc_hsq.h | 5 +++++ > 2 files changed, 32 insertions(+) > > diff --git a/drivers/mmc/host/mmc_hsq.c b/drivers/mmc/host/mmc_hsq.c > index 8556cacb21a1..0984c39108ba 100644 > --- a/drivers/mmc/host/mmc_hsq.c > +++ b/drivers/mmc/host/mmc_hsq.c > @@ -21,6 +21,31 @@ static void mmc_hsq_retry_handler(struct work_struct *work) > mmc->ops->request(mmc, hsq->mrq); > } > > +static void mmc_hsq_modify_threshold(struct mmc_hsq *hsq) > +{ > + struct mmc_host *mmc = hsq->mmc; > + struct mmc_request *mrq; > + struct hsq_slot *slot; > + int need_change = 0; Rather than using a variable to keep track of this, why not just do the below here? mmc->hsq_depth = HSQ_NORMAL_DEPTH; > + int tag; > + > + for (tag = 0; tag < HSQ_NUM_SLOTS; tag++) { > + slot = &hsq->slot[tag]; > + mrq = slot->mrq; > + if (mrq && mrq->data && > + (mrq->data->blksz * mrq->data->blocks == 4096) && > + (mrq->data->flags & MMC_DATA_WRITE)) > + need_change++; And following above, then we can do the below here: mmc->hsq_depth = HSQ_PERFORMANCE_DEPTH; break; That should simplify and make this more efficient too, right? > + else > + break; > + } > + > + if (need_change > 1) > + mmc->hsq_depth = HSQ_PERFORMANCE_DEPTH; > + else > + mmc->hsq_depth = HSQ_NORMAL_DEPTH; > +} > + [...] Kind regards Uffe