> > > +/* > > > + * 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. However, I think there can be up to 32 regular luns, meaning UFS_UPIU_MAX_UNIT_NUM_ID need to be fixed as well. Thanks, Avri > > Thanks, > Daejun