> > > > +/* > > > > + * This function will parse recommended active subregion information in > > > > sense > > > > + * data field of response UPIU with SAM_STAT_GOOD state. > > > > + */ > > > > +void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) > > > > +{ > > > > + struct ufshpb_lu *hpb; > > > > + struct scsi_device *sdev; > > > > + struct utp_hpb_rsp *rsp_field = &lrbp->ucd_rsp_ptr->hr; > > > > + int data_seg_len; > > > > + bool found = false; > > > > + > > > > + __shost_for_each_device(sdev, hba->host) { > > > > + hpb = ufshpb_get_hpb_data(sdev); > > > > + > > > > + if (!hpb) > > > > + continue; > > > > + > > > > + if (rsp_field->lun == hpb->lun) { > > > > + found = true; > > > > + break; > > > This piece of code looks awkward, although it is probably working. > > > Why not just having a reference to the hpb luns, e.g. something like: > > > struct ufshpb_lu *hpb_luns[8] in struct ufs_hba. > > > Less elegant - but much more effective than iterating the scsi host on every > > completion interrupt. > > > > How about checking (cmd->lun == rsp->lun) before the iteration? > > Major case will be have same lun. And, it is hard to add struct ufshpb_lu > > *hpb_luns[128] > > in struct ufs_hba, because LUN can be upto 127. > Oh - yes, 8 is for write booster. > OK. Whatever you think. Then, I want to keep this code with adding code that checking same LUN for fast path. > However, I think there can be up to 32 regular luns, > meaning UFS_UPIU_MAX_UNIT_NUM_ID need to be fixed as well. OK, it can be fixed another patch. Thanks, Daejun