RE: RE: RE: [PATCH v22 2/4] scsi: ufs: L2P map management for HPB read
From: Avri Altman <Avri.Altman@wdc.com>
Date: 2021-02-23 08:48:09
Also in:
lkml
quoted
+/*quoted
+ * 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 everycompletion 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