On Thu, 14 Sept 2023 at 20:57, Ulf Hansson <ulf.hansson@xxxxxxxxxx> wrote: > > 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? > Yes, you are right. But need_change = 2, it means more reqs are allowed. Alternatively, modify it like this: mmc->hsq_depth = (need_change > 1) ? HSQ_PERFORMANCE_DEPTH : HSQ_NORMAL_DEPTH; > > + else > > + break; > > + } > > + > > + if (need_change > 1) > > + mmc->hsq_depth = HSQ_PERFORMANCE_DEPTH; > > + else > > + mmc->hsq_depth = HSQ_NORMAL_DEPTH; > > +} > > + > > [...] > > Kind regards > Uffe