Message ID | 20210111084756.1810924-1-jaegeuk@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2] scsi: ufs: WB is not allowed in RPMB_LUN | expand |
> static inline bool ufs_is_valid_unit_desc_lun(struct ufs_dev_info *dev_info, > - u8 lun) > + u8 lun, u8 param_offset) > { > if (!dev_info || !dev_info->max_lu_supported) { > pr_err("Max General LU supported by UFS isn't initialized\n"); > return false; > } > - > + /* WB is not allowed in RPMB_WLUN */ /* wb is only allowed to either a sha*/ > + if (param_offset == UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS) > + return lun < dev_info->max_lu_supported; I think here you should use UFS_UPIU_MAX_WB_LUN_ID and not dev_info->max_lu_supported. Thanks, Avri
On 01/11, Avri Altman wrote: > > static inline bool ufs_is_valid_unit_desc_lun(struct ufs_dev_info *dev_info, > > - u8 lun) > > + u8 lun, u8 param_offset) > > { > > if (!dev_info || !dev_info->max_lu_supported) { > > pr_err("Max General LU supported by UFS isn't initialized\n"); > > return false; > > } > > - > > + /* WB is not allowed in RPMB_WLUN */ > /* wb is only allowed to either a sha*/ > > + if (param_offset == UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS) > > + return lun < dev_info->max_lu_supported; > I think here you should use UFS_UPIU_MAX_WB_LUN_ID and not dev_info->max_lu_supported. Ok, sending v3. > > Thanks, > Avri
diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index 08e72b7eef6a..50e90416262b 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -792,7 +792,8 @@ static ssize_t _pname##_show(struct device *dev, \ struct scsi_device *sdev = to_scsi_device(dev); \ struct ufs_hba *hba = shost_priv(sdev->host); \ u8 lun = ufshcd_scsi_to_upiu_lun(sdev->lun); \ - if (!ufs_is_valid_unit_desc_lun(&hba->dev_info, lun)) \ + if (!ufs_is_valid_unit_desc_lun(&hba->dev_info, lun, \ + _duname##_DESC_PARAM##_puname)) \ return -EINVAL; \ return ufs_sysfs_read_desc_param(hba, QUERY_DESC_IDN_##_duname, \ lun, _duname##_DESC_PARAM##_puname, buf, _size); \ diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index 14dfda735adf..7a0069c83900 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -552,13 +552,15 @@ struct ufs_dev_info { * @return: true if the lun has a matching unit descriptor, false otherwise */ static inline bool ufs_is_valid_unit_desc_lun(struct ufs_dev_info *dev_info, - u8 lun) + u8 lun, u8 param_offset) { if (!dev_info || !dev_info->max_lu_supported) { pr_err("Max General LU supported by UFS isn't initialized\n"); return false; } - + /* WB is not allowed in RPMB_WLUN */ + if (param_offset == UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS) + return lun < dev_info->max_lu_supported; return lun == UFS_UPIU_RPMB_WLUN || (lun < dev_info->max_lu_supported); } diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 2a715f13fe1d..48cbd4f294dd 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -3425,7 +3425,7 @@ static inline int ufshcd_read_unit_desc_param(struct ufs_hba *hba, * Unit descriptors are only available for general purpose LUs (LUN id * from 0 to 7) and RPMB Well known LU. */ - if (!ufs_is_valid_unit_desc_lun(&hba->dev_info, lun)) + if (!ufs_is_valid_unit_desc_lun(&hba->dev_info, lun, param_offset)) return -EOPNOTSUPP; return ufshcd_read_desc_param(hba, QUERY_DESC_IDN_UNIT, lun,