RE: [RFC PATCH v2 4/5] scsi: ufs: L2P map management for HPB read
From: Avri Altman
Date: Thu Jun 18 2020 - 02:12:47 EST
> > +
> > > +static struct ufshpb_map_ctx *ufshpb_get_map_ctx(struct ufshpb_lu
> *hpb)
> > > +{
> > > + struct ufshpb_map_ctx *mctx;
> > > + int i, j;
> > > +
> > > + mctx = mempool_alloc(ufshpb_drv.ufshpb_mctx_pool, GFP_KERNEL);
> > > + if (!mctx)
> > > + return NULL;
> > So you use ufshpb_host_map_kbytes as the min_nr in your
> mempool_create,
> > But you know that you need max_lru_active_cnt x srgns_per_rgn such
> mapping context elements.
> > So you are
> > a) failing to provide the slab allocator an information that you already have,
> and
> > b) selecting from a finite pool will assure that you'll never exceed max-
> active-regions,
> > even if some corner case fails your logic.
> It was intend to provide user-configurable pre-allocated memory to reduce
> latency due to memory allocation. The value of ufshpb_host_map_kbytes can
> be set to max_lru_active_cnt x srgns_per_rgn, if the user want to.
Ok, I see your point.
It is as if you expect that a "user" will query the unit descriptors first,
Make some calculations, and then will run modprobe with the proper value.
Are you assuming that an "intelligent" user does all that?
The reasonable scenario IMO, is that OEMs will initiate a service in their
ramdisk/init.rc with some default value.
Don't you see the damage potential in using a wrong value here?