X-Git-Url: http://git.etherboot.org/mirror/winof/.git/blobdiff_plain/5e7a7a66c96b9bfcf8128f08befa0ed7944f6397..e36fa3e47740e5c41bf3b89a20a4373c93aceb14:/hw/mt23108/user/mlnx_ual_qp.c diff --git a/hw/mt23108/user/mlnx_ual_qp.c b/hw/mt23108/user/mlnx_ual_qp.c index b6d5273b..21cb0099 100644 --- a/hw/mt23108/user/mlnx_ual_qp.c +++ b/hw/mt23108/user/mlnx_ual_qp.c @@ -251,94 +251,83 @@ mlnx_post_create_qp ( OUT ib_qp_handle_t *ph_uvp_qp, IN ci_umv_buf_t *p_umv_buf ) { - ib_api_status_t status; - mlnx_ual_pd_info_t *p_pd_info = (mlnx_ual_pd_info_t *)((void*)h_uvp_pd); - mlnx_ual_hobul_t *p_hobul; - mlnx_ual_qp_info_t *p_new_qp; - MT_size_t buf_size; - - FUNC_ENTER; - CL_ASSERT(p_pd_info); - CL_ASSERT(p_umv_buf); + mlnx_ual_pd_info_t *p_pd_info = (mlnx_ual_pd_info_t *)((void*)h_uvp_pd); + mlnx_ual_hobul_t *p_hobul; + mlnx_ual_qp_info_t *p_new_qp; + MT_size_t buf_size; - p_hobul = p_pd_info->p_hobul; - CL_ASSERT(p_hobul); + FUNC_ENTER; + CL_ASSERT(p_pd_info); + CL_ASSERT(p_umv_buf); - status = ioctl_status; + p_hobul = p_pd_info->p_hobul; + CL_ASSERT(p_hobul); - do - { - buf_size = p_hobul->p_hca_ul_info->qp_ul_resources_sz + - sizeof (u_int32_t) + sizeof (mlnx_ual_qp_info_t *); + buf_size = p_hobul->p_hca_ul_info->qp_ul_resources_sz + + sizeof (u_int32_t) + sizeof (mlnx_ual_qp_info_t *); - /* - * Retrieve our qp_info back from priv buffer - */ - cl_memcpy (&p_new_qp, ((u_int8_t *)p_umv_buf->p_inout_buf + buf_size - - sizeof (mlnx_ual_qp_info_t *)), sizeof (mlnx_ual_qp_info_t *)); - CL_ASSERT(p_new_qp); - *ph_uvp_qp = (uvp_qp_handle_t) p_new_qp; + /* Retrieve our qp_info back from priv buffer */ + cl_memcpy (&p_new_qp, ((u_int8_t *)p_umv_buf->p_inout_buf + buf_size - + sizeof (mlnx_ual_qp_info_t *)), sizeof (mlnx_ual_qp_info_t *)); + CL_ASSERT(p_new_qp); + *ph_uvp_qp = (uvp_qp_handle_t) p_new_qp; - if (IB_SUCCESS == status) - { - if (IB_SUCCESS != p_umv_buf->status) - { - CL_TRACE (MLNX_TRACE_LVL_1, mlnx_dbg_lvl, - ("Bad status %ld\n", p_umv_buf->status)); - status = p_umv_buf->status; - break; - } - else if ((buf_size - sizeof (mlnx_ual_qp_info_t *)) != - p_umv_buf->output_size) - { - CL_TRACE (MLNX_TRACE_LVL_1, mlnx_dbg_lvl, - ("Bad user priv buffer size exp = %d, res = %ld\n", - buf_size, p_umv_buf->output_size)); - status = IB_ERROR; - break; - } - - cl_memcpy (p_new_qp->p_qp_ul_resources, - p_umv_buf->p_inout_buf, - p_hobul->p_hca_ul_info->qp_ul_resources_sz); - - cl_memcpy (&p_new_qp->qp_idx, - ((u_int8_t *)p_umv_buf->p_inout_buf + - p_hobul->p_hca_ul_info->qp_ul_resources_sz), - sizeof (u_int32_t)); - - if (HH_OK != - THHUL_qpm_create_qp_done (p_hobul->hhul_hca_hndl, - p_new_qp->hhul_qp_hndl, - p_new_qp->qp_idx, - p_new_qp->p_qp_ul_resources)) - { - CL_TRACE (MLNX_TRACE_LVL_1, mlnx_dbg_lvl, - ("Call THHUL_qpm_create_qp_done Failed\n")); - status = IB_ERROR; - break; - } - - CL_TRACE (MLNX_TRACE_LVL_7, mlnx_dbg_lvl, - ("Newly created QP qp_idx 0x%x\n",p_new_qp->qp_idx)); - } - else - { - if (p_new_qp->p_qp_ul_resources); - { - cl_free (p_new_qp->p_qp_ul_resources); - } - cl_free (p_new_qp); - } + if ( ioctl_status == IB_SUCCESS ) + { + if (IB_SUCCESS != p_umv_buf->status) + { + CL_TRACE (MLNX_TRACE_LVL_1, mlnx_dbg_lvl, + ("Bad status %ld\n", p_umv_buf->status)); + goto err; + } + else if ((buf_size - sizeof (mlnx_ual_qp_info_t *)) != + p_umv_buf->output_size) + { + CL_TRACE (MLNX_TRACE_LVL_1, mlnx_dbg_lvl, + ("Bad user priv buffer size exp = %d, res = %ld\n", + buf_size, p_umv_buf->output_size)); + goto err; + } + + cl_memcpy (p_new_qp->p_qp_ul_resources, + p_umv_buf->p_inout_buf, + p_hobul->p_hca_ul_info->qp_ul_resources_sz); + + cl_memcpy (&p_new_qp->qp_idx, + ((u_int8_t *)p_umv_buf->p_inout_buf + + p_hobul->p_hca_ul_info->qp_ul_resources_sz), + sizeof (u_int32_t)); + + if (HH_OK != + THHUL_qpm_create_qp_done (p_hobul->hhul_hca_hndl, + p_new_qp->hhul_qp_hndl, + p_new_qp->qp_idx, + p_new_qp->p_qp_ul_resources)) + { + CL_TRACE (MLNX_TRACE_LVL_1, mlnx_dbg_lvl, + ("Call THHUL_qpm_create_qp_done Failed\n")); + goto err; + } + + CL_TRACE (MLNX_TRACE_LVL_7, mlnx_dbg_lvl, + ("Newly created QP qp_idx 0x%x\n",p_new_qp->qp_idx)); + } + else + { +err: + if (p_new_qp->p_qp_ul_resources) + cl_free (p_new_qp->p_qp_ul_resources); - } while (0); + cl_free (p_new_qp); + *ph_uvp_qp = NULL; + } - cl_free (p_umv_buf->p_inout_buf); - p_umv_buf->p_inout_buf = NULL; + cl_free (p_umv_buf->p_inout_buf); + p_umv_buf->p_inout_buf = NULL; - FUNC_EXIT; - return; + FUNC_EXIT; + return; }