On Mon, 10 Feb 2025 09:50:17 +0800
Bingbin Chen <chen.bing...@zte.com.cn> wrote:

> +static uint32_t
> +zxdh_np_se_smmu0_ind_read(uint32_t dev_id,
> +                                             uint32_t base_addr,
> +                                             uint32_t index,
> +                                             uint32_t rd_mode,
> +                                             uint32_t rd_clr_mode,
> +                                             uint32_t *p_data)
> +{
> +     uint32_t rc = ZXDH_OK;
> +     uint32_t i = 0;
> +     uint32_t row_index = 0;
> +     uint32_t col_index = 0;
> +     uint32_t temp_data[4] = {0};
> +     uint32_t *p_temp_data = NULL;
> +     ZXDH_SMMU0_SMMU0_CPU_IND_CMD_T cpu_ind_cmd = {0};
> +     ZXDH_MUTEX_T *p_ind_mutex = NULL;
> +
> +     rc = zxdh_np_dev_opr_mutex_get(dev_id, ZXDH_DEV_MUTEX_T_SMMU0, 
> &p_ind_mutex);
> +     ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_dev_opr_mutex_get");
> +
> +     rc = zxdh_np_comm_mutex_lock(p_ind_mutex);
> +     ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, "zxdh_np_comm_mutex_lock");
> +
> +     rc = zxdh_np_se_done_status_check(dev_id, 
> ZXDH_SMMU0_SMMU0_WR_ARB_CPU_RDYR, 0);
> +     ZXDH_COMM_CHECK_DEV_RC_UNLOCK(dev_id, rc, 
> "zxdh_np_se_done_status_check", p_ind_mutex);
> +
> +     if (rd_clr_mode == ZXDH_RD_MODE_HOLD) {
> +             cpu_ind_cmd.cpu_ind_rw = ZXDH_SE_OPR_RD;
> +             cpu_ind_cmd.cpu_ind_rd_mode = ZXDH_RD_MODE_HOLD;
> +             cpu_ind_cmd.cpu_req_mode = ZXDH_ERAM128_OPR_128b;
> +
> +             switch (rd_mode) {
> +             case ZXDH_ERAM128_OPR_128b:
> +             {
> +                     if ((0xFFFFFFFF - (base_addr)) < (index)) {
> +                             rc = zxdh_np_comm_mutex_unlock(p_ind_mutex);
> +                             ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, 
> "zxdh_np_comm_mutex_unlock");
> +                             PMD_DRV_LOG(ERR, "%s : index 0x%x is invalid!", 
> __func__, index);
> +                             return ZXDH_PAR_CHK_INVALID_INDEX;
> +                     }
> +                     if (base_addr + index > 
> ZXDH_SE_SMMU0_ERAM_ADDR_NUM_TOTAL - 1) {
> +                             PMD_DRV_LOG(ERR, "%s : index out of range !", 
> __func__);
> +                             rc = zxdh_np_comm_mutex_unlock(p_ind_mutex);
> +                             ZXDH_COMM_CHECK_DEV_RC(dev_id, rc, 
> "zxdh_np_comm_mutex_unlock");
> +                             return ZXDH_ERR;
> +                     }

The error paths here are a bit of a mess.
Do you really have to check return value of mutex_unlock if already have an 
error?

Reply via email to