2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

scsi: ufs: core: Fix the return value documentation

ufshcd_wait_for_dev_cmd() and all its callers can return an OCS error.
OCS errors are represented by positive integers. Remove the WARN_ONCE()
statements that complain about positive error codes and update the
documentation.

Keep the behavior of ufshcd_wait_for_dev_cmd() because this return value
may end be passed as the second argument of bsg_job_done() and
bsg_job_done() handles positive and negative error codes differently.

Cc: Peter Wang <peter.wang@mediatek.com>
Fixes: cc59f3b685 ("scsi: ufs: core: Improve return value documentation")
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20250815155842.472867-4-bvanassche@acm.org
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Bart Van Assche 2025-08-15 08:58:25 -07:00 committed by Martin K. Petersen
parent e5203d89d5
commit 9ee35fd43f

View File

@ -3199,7 +3199,8 @@ ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
} }
/* /*
* Return: 0 upon success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba, static int ufshcd_wait_for_dev_cmd(struct ufs_hba *hba,
struct ufshcd_lrb *lrbp, int max_timeout) struct ufshcd_lrb *lrbp, int max_timeout)
@ -3275,7 +3276,6 @@ retry:
} }
} }
WARN_ONCE(err > 0, "Incorrect return value %d > 0\n", err);
return err; return err;
} }
@ -3294,7 +3294,8 @@ static void ufshcd_dev_man_unlock(struct ufs_hba *hba)
} }
/* /*
* Return: 0 upon success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
static int ufshcd_issue_dev_cmd(struct ufs_hba *hba, struct ufshcd_lrb *lrbp, static int ufshcd_issue_dev_cmd(struct ufs_hba *hba, struct ufshcd_lrb *lrbp,
const u32 tag, int timeout) const u32 tag, int timeout)
@ -3317,7 +3318,8 @@ static int ufshcd_issue_dev_cmd(struct ufs_hba *hba, struct ufshcd_lrb *lrbp,
* @cmd_type: specifies the type (NOP, Query...) * @cmd_type: specifies the type (NOP, Query...)
* @timeout: timeout in milliseconds * @timeout: timeout in milliseconds
* *
* Return: 0 upon success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
* *
* NOTE: Since there is only one available tag for device management commands, * NOTE: Since there is only one available tag for device management commands,
* it is expected you hold the hba->dev_cmd.lock mutex. * it is expected you hold the hba->dev_cmd.lock mutex.
@ -3363,6 +3365,10 @@ static inline void ufshcd_init_query(struct ufs_hba *hba,
(*request)->upiu_req.selector = selector; (*request)->upiu_req.selector = selector;
} }
/*
* Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/
static int ufshcd_query_flag_retry(struct ufs_hba *hba, static int ufshcd_query_flag_retry(struct ufs_hba *hba,
enum query_opcode opcode, enum flag_idn idn, u8 index, bool *flag_res) enum query_opcode opcode, enum flag_idn idn, u8 index, bool *flag_res)
{ {
@ -3383,7 +3389,6 @@ static int ufshcd_query_flag_retry(struct ufs_hba *hba,
dev_err(hba->dev, dev_err(hba->dev,
"%s: query flag, opcode %d, idn %d, failed with error %d after %d retries\n", "%s: query flag, opcode %d, idn %d, failed with error %d after %d retries\n",
__func__, opcode, idn, ret, retries); __func__, opcode, idn, ret, retries);
WARN_ONCE(ret > 0, "Incorrect return value %d > 0\n", ret);
return ret; return ret;
} }
@ -3395,7 +3400,8 @@ static int ufshcd_query_flag_retry(struct ufs_hba *hba,
* @index: flag index to access * @index: flag index to access
* @flag_res: the flag value after the query request completes * @flag_res: the flag value after the query request completes
* *
* Return: 0 for success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode, int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
enum flag_idn idn, u8 index, bool *flag_res) enum flag_idn idn, u8 index, bool *flag_res)
@ -3451,7 +3457,6 @@ int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
out_unlock: out_unlock:
ufshcd_dev_man_unlock(hba); ufshcd_dev_man_unlock(hba);
WARN_ONCE(err > 0, "Incorrect return value %d > 0\n", err);
return err; return err;
} }
@ -3464,8 +3469,9 @@ out_unlock:
* @selector: selector field * @selector: selector field
* @attr_val: the attribute value after the query request completes * @attr_val: the attribute value after the query request completes
* *
* Return: 0 upon success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
*/ * < 0 if another error occurred.
*/
int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode, int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
enum attr_idn idn, u8 index, u8 selector, u32 *attr_val) enum attr_idn idn, u8 index, u8 selector, u32 *attr_val)
{ {
@ -3513,7 +3519,6 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
out_unlock: out_unlock:
ufshcd_dev_man_unlock(hba); ufshcd_dev_man_unlock(hba);
WARN_ONCE(err > 0, "Incorrect return value %d > 0\n", err);
return err; return err;
} }
@ -3528,8 +3533,9 @@ out_unlock:
* @attr_val: the attribute value after the query request * @attr_val: the attribute value after the query request
* completes * completes
* *
* Return: 0 for success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
*/ * < 0 if another error occurred.
*/
int ufshcd_query_attr_retry(struct ufs_hba *hba, int ufshcd_query_attr_retry(struct ufs_hba *hba,
enum query_opcode opcode, enum attr_idn idn, u8 index, u8 selector, enum query_opcode opcode, enum attr_idn idn, u8 index, u8 selector,
u32 *attr_val) u32 *attr_val)
@ -3551,12 +3557,12 @@ int ufshcd_query_attr_retry(struct ufs_hba *hba,
dev_err(hba->dev, dev_err(hba->dev,
"%s: query attribute, idn %d, failed with error %d after %d retries\n", "%s: query attribute, idn %d, failed with error %d after %d retries\n",
__func__, idn, ret, QUERY_REQ_RETRIES); __func__, idn, ret, QUERY_REQ_RETRIES);
WARN_ONCE(ret > 0, "Incorrect return value %d > 0\n", ret);
return ret; return ret;
} }
/* /*
* Return: 0 if successful; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
static int __ufshcd_query_descriptor(struct ufs_hba *hba, static int __ufshcd_query_descriptor(struct ufs_hba *hba,
enum query_opcode opcode, enum desc_idn idn, u8 index, enum query_opcode opcode, enum desc_idn idn, u8 index,
@ -3615,7 +3621,6 @@ static int __ufshcd_query_descriptor(struct ufs_hba *hba,
out_unlock: out_unlock:
hba->dev_cmd.query.descriptor = NULL; hba->dev_cmd.query.descriptor = NULL;
ufshcd_dev_man_unlock(hba); ufshcd_dev_man_unlock(hba);
WARN_ONCE(err > 0, "Incorrect return value %d > 0\n", err);
return err; return err;
} }
@ -3632,7 +3637,8 @@ out_unlock:
* The buf_len parameter will contain, on return, the length parameter * The buf_len parameter will contain, on return, the length parameter
* received on the response. * received on the response.
* *
* Return: 0 for success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
int ufshcd_query_descriptor_retry(struct ufs_hba *hba, int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
enum query_opcode opcode, enum query_opcode opcode,
@ -3650,7 +3656,6 @@ int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
break; break;
} }
WARN_ONCE(err > 0, "Incorrect return value %d > 0\n", err);
return err; return err;
} }
@ -3663,7 +3668,8 @@ int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
* @param_read_buf: pointer to buffer where parameter would be read * @param_read_buf: pointer to buffer where parameter would be read
* @param_size: sizeof(param_read_buf) * @param_size: sizeof(param_read_buf)
* *
* Return: 0 in case of success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
int ufshcd_read_desc_param(struct ufs_hba *hba, int ufshcd_read_desc_param(struct ufs_hba *hba,
enum desc_idn desc_id, enum desc_idn desc_id,
@ -3730,7 +3736,6 @@ int ufshcd_read_desc_param(struct ufs_hba *hba,
out: out:
if (is_kmalloc) if (is_kmalloc)
kfree(desc_buf); kfree(desc_buf);
WARN_ONCE(ret > 0, "Incorrect return value %d > 0\n", ret);
return ret; return ret;
} }
@ -4781,7 +4786,8 @@ EXPORT_SYMBOL_GPL(ufshcd_config_pwr_mode);
* *
* Set fDeviceInit flag and poll until device toggles it. * Set fDeviceInit flag and poll until device toggles it.
* *
* Return: 0 upon success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
static int ufshcd_complete_dev_init(struct ufs_hba *hba) static int ufshcd_complete_dev_init(struct ufs_hba *hba)
{ {
@ -5135,7 +5141,8 @@ out:
* not respond with NOP IN UPIU within timeout of %NOP_OUT_TIMEOUT * not respond with NOP IN UPIU within timeout of %NOP_OUT_TIMEOUT
* and we retry sending NOP OUT for %NOP_OUT_RETRIES iterations. * and we retry sending NOP OUT for %NOP_OUT_RETRIES iterations.
* *
* Return: 0 upon success; < 0 upon failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
static int ufshcd_verify_dev_init(struct ufs_hba *hba) static int ufshcd_verify_dev_init(struct ufs_hba *hba)
{ {
@ -5867,7 +5874,8 @@ static inline int ufshcd_enable_ee(struct ufs_hba *hba, u16 mask)
* as the device is allowed to manage its own way of handling background * as the device is allowed to manage its own way of handling background
* operations. * operations.
* *
* Return: zero on success, non-zero on failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
static int ufshcd_enable_auto_bkops(struct ufs_hba *hba) static int ufshcd_enable_auto_bkops(struct ufs_hba *hba)
{ {
@ -5906,7 +5914,8 @@ out:
* host is idle so that BKOPS are managed effectively without any negative * host is idle so that BKOPS are managed effectively without any negative
* impacts. * impacts.
* *
* Return: zero on success, non-zero on failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
static int ufshcd_disable_auto_bkops(struct ufs_hba *hba) static int ufshcd_disable_auto_bkops(struct ufs_hba *hba)
{ {
@ -6056,6 +6065,10 @@ out:
__func__, err); __func__, err);
} }
/*
* Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/
int ufshcd_read_device_lvl_exception_id(struct ufs_hba *hba, u64 *exception_id) int ufshcd_read_device_lvl_exception_id(struct ufs_hba *hba, u64 *exception_id)
{ {
struct utp_upiu_query_v4_0 *upiu_resp; struct utp_upiu_query_v4_0 *upiu_resp;
@ -7452,7 +7465,8 @@ int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba,
* @sg_list: Pointer to SG list when DATA IN/OUT UPIU is required in ARPMB operation * @sg_list: Pointer to SG list when DATA IN/OUT UPIU is required in ARPMB operation
* @dir: DMA direction * @dir: DMA direction
* *
* Return: zero on success, non-zero on failure. * Return: 0 upon success; > 0 in case the UFS device reported an OCS error;
* < 0 if another error occurred.
*/ */
int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *req_upiu, int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *req_upiu,
struct utp_upiu_req *rsp_upiu, struct ufs_ehs *req_ehs, struct utp_upiu_req *rsp_upiu, struct ufs_ehs *req_ehs,