> +/* > > + * 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. Thanks, Daejun