Messages in this thread | | | Date | Mon, 15 Mar 2021 16:30:29 +0800 | From | Can Guo <> | Subject | Re: [PATCH v5 04/10] scsi: ufshpb: Make eviction depends on region's reads |
| |
On 2021-03-02 21:24, Avri Altman wrote: > In host mode, eviction is considered an extreme measure. > verify that the entering region has enough reads, and the exiting > region has much less reads. > > Signed-off-by: Avri Altman <avri.altman@wdc.com> > --- > drivers/scsi/ufs/ufshpb.c | 20 +++++++++++++++++++- > 1 file changed, 19 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/ufs/ufshpb.c b/drivers/scsi/ufs/ufshpb.c > index a8f8d13af21a..6f4fd22eaf2f 100644 > --- a/drivers/scsi/ufs/ufshpb.c > +++ b/drivers/scsi/ufs/ufshpb.c > @@ -17,6 +17,7 @@ > #include "../sd.h" > > #define ACTIVATION_THRESHOLD 4 /* 4 IOs */ > +#define EVICTION_THRESHOLD (ACTIVATION_THRESHOLD << 6) /* 256 IOs */ > > /* memory management */ > static struct kmem_cache *ufshpb_mctx_cache; > @@ -1050,6 +1051,13 @@ static struct ufshpb_region > *ufshpb_victim_lru_info(struct ufshpb_lu *hpb) > if (ufshpb_check_srgns_issue_state(hpb, rgn)) > continue; > > + /* > + * in host control mode, verify that the exiting region > + * has less reads > + */ > + if (hpb->is_hcm && rgn->reads > (EVICTION_THRESHOLD >> 1)) > + continue; > + > victim_rgn = rgn; > break; > } > @@ -1235,7 +1243,7 @@ static int ufshpb_issue_map_req(struct ufshpb_lu > *hpb, > > static int ufshpb_add_region(struct ufshpb_lu *hpb, struct > ufshpb_region *rgn) > { > - struct ufshpb_region *victim_rgn; > + struct ufshpb_region *victim_rgn = NULL; > struct victim_select_info *lru_info = &hpb->lru_info; > unsigned long flags; > int ret = 0; > @@ -1263,6 +1271,16 @@ static int ufshpb_add_region(struct ufshpb_lu > *hpb, struct ufshpb_region *rgn) > * because the device could detect this region > * by not issuing HPB_READ > */ > + > + /* > + * in host control mode, verify that the entering > + * region has enough reads > + */
Maybe merge the new comments with the original comments above?
Thanks, Can Guo.
> + if (hpb->is_hcm && rgn->reads < EVICTION_THRESHOLD) { > + ret = -EACCES; > + goto out; > + } > + > victim_rgn = ufshpb_victim_lru_info(hpb); > if (!victim_rgn) { > dev_warn(&hpb->sdev_ufs_lu->sdev_dev,
| |