RE: RE: [PATCH v21 2/4] scsi: ufs: L2P map management for HPB read

From: Daejun Park
Date: Mon Feb 22 2021 - 03:17:59 EST


> +static bool ufshpb_is_hpb_rsp_valid(struct ufs_hba *hba,
> > + struct ufshcd_lrb *lrbp,
> > + struct utp_hpb_rsp *rsp_field)
> > +{
> > + if (be16_to_cpu(rsp_field->sense_data_len) != DEV_SENSE_SEG_LEN ||
> > + rsp_field->desc_type != DEV_DES_TYPE ||
> > + rsp_field->additional_len != DEV_ADDITIONAL_LEN ||
> > + rsp_field->active_rgn_cnt > MAX_ACTIVE_NUM ||
> > + rsp_field->inactive_rgn_cnt > MAX_INACTIVE_NUM ||
> > + (rsp_field->hpb_op == HPB_RSP_REQ_REGION_UPDATE &&
> > + !rsp_field->active_rgn_cnt && !rsp_field->inactive_rgn_cnt))
> > + return false;
> > +
> > + /* we cannot access HPB from other LU */
> > + if (lrbp->lun != rsp_field->lun)
> > + return false;
> Why not?
> Clearly this against the spec which allows to attach hpb sense crossed luns
>
> > +
> > + if (!ufshpb_is_general_lun(lrbp->lun)) {
> > + dev_warn(hba->dev, "ufshpb: lun(%d) not supported\n",
> > + lrbp->lun);
> > + return false;
> > + }
> > +
> > + return true;
> > +}
>
>
>
>
> > +void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
> > +{
> > + struct ufshpb_lu *hpb = ufshpb_get_hpb_data(lrbp->cmd->device);
> > + struct utp_hpb_rsp *rsp_field;
> > + int data_seg_len;
> > +
> > + if (!hpb)
> > + return;
> Ditto

I fixed the code to support the crossed-hint.

Thanks,
Daejun