RDMA/hns: optimize the duplicated code for qpc setting flow
Currently, more than 20 lines of duplicate code exist in function 'modify_qp_init_to_init' and function 'modify_qp_reset_to_init', which affects the readability of the code. Consolidate them. Link: https://lore.kernel.org/r/1562593285-8037-6-git-send-email-oulijun@huawei.com Signed-off-by: Xi Wang <wangxi11@huawei.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
947441eadb
commit
99441ab552
@ -3118,6 +3118,43 @@ static void set_access_flags(struct hns_roce_qp *hr_qp,
|
||||
roce_set_bit(qpc_mask->byte_76_srqn_op_en, V2_QPC_BYTE_76_ATE_S, 0);
|
||||
}
|
||||
|
||||
static void set_qpc_wqe_cnt(struct hns_roce_qp *hr_qp,
|
||||
struct hns_roce_v2_qp_context *context,
|
||||
struct hns_roce_v2_qp_context *qpc_mask)
|
||||
{
|
||||
if (hr_qp->ibqp.qp_type == IB_QPT_GSI)
|
||||
roce_set_field(context->byte_4_sqpn_tst,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S,
|
||||
ilog2((unsigned int)hr_qp->sge.sge_cnt));
|
||||
else
|
||||
roce_set_field(context->byte_4_sqpn_tst,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S,
|
||||
hr_qp->sq.max_gs >
|
||||
HNS_ROCE_V2_UC_RC_SGE_NUM_IN_WQE ?
|
||||
ilog2((unsigned int)hr_qp->sge.sge_cnt) : 0);
|
||||
|
||||
roce_set_field(qpc_mask->byte_4_sqpn_tst, V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S, 0);
|
||||
|
||||
roce_set_field(context->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_SQ_SHIFT_M, V2_QPC_BYTE_20_SQ_SHIFT_S,
|
||||
ilog2((unsigned int)hr_qp->sq.wqe_cnt));
|
||||
roce_set_field(qpc_mask->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_SQ_SHIFT_M, V2_QPC_BYTE_20_SQ_SHIFT_S, 0);
|
||||
|
||||
roce_set_field(context->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_RQ_SHIFT_M, V2_QPC_BYTE_20_RQ_SHIFT_S,
|
||||
(hr_qp->ibqp.qp_type == IB_QPT_XRC_INI ||
|
||||
hr_qp->ibqp.qp_type == IB_QPT_XRC_TGT ||
|
||||
hr_qp->ibqp.srq) ? 0 :
|
||||
ilog2((unsigned int)hr_qp->rq.wqe_cnt));
|
||||
|
||||
roce_set_field(qpc_mask->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_RQ_SHIFT_M, V2_QPC_BYTE_20_RQ_SHIFT_S, 0);
|
||||
}
|
||||
|
||||
static void modify_qp_reset_to_init(struct ib_qp *ibqp,
|
||||
const struct ib_qp_attr *attr,
|
||||
int attr_mask,
|
||||
@ -3138,21 +3175,6 @@ static void modify_qp_reset_to_init(struct ib_qp *ibqp,
|
||||
roce_set_field(qpc_mask->byte_4_sqpn_tst, V2_QPC_BYTE_4_TST_M,
|
||||
V2_QPC_BYTE_4_TST_S, 0);
|
||||
|
||||
if (ibqp->qp_type == IB_QPT_GSI)
|
||||
roce_set_field(context->byte_4_sqpn_tst,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S,
|
||||
ilog2((unsigned int)hr_qp->sge.sge_cnt));
|
||||
else
|
||||
roce_set_field(context->byte_4_sqpn_tst,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S,
|
||||
hr_qp->sq.max_gs > 2 ?
|
||||
ilog2((unsigned int)hr_qp->sge.sge_cnt) : 0);
|
||||
|
||||
roce_set_field(qpc_mask->byte_4_sqpn_tst, V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S, 0);
|
||||
|
||||
roce_set_field(context->byte_4_sqpn_tst, V2_QPC_BYTE_4_SQPN_M,
|
||||
V2_QPC_BYTE_4_SQPN_S, hr_qp->qpn);
|
||||
roce_set_field(qpc_mask->byte_4_sqpn_tst, V2_QPC_BYTE_4_SQPN_M,
|
||||
@ -3168,19 +3190,7 @@ static void modify_qp_reset_to_init(struct ib_qp *ibqp,
|
||||
roce_set_field(qpc_mask->byte_20_smac_sgid_idx, V2_QPC_BYTE_20_RQWS_M,
|
||||
V2_QPC_BYTE_20_RQWS_S, 0);
|
||||
|
||||
roce_set_field(context->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_SQ_SHIFT_M, V2_QPC_BYTE_20_SQ_SHIFT_S,
|
||||
ilog2((unsigned int)hr_qp->sq.wqe_cnt));
|
||||
roce_set_field(qpc_mask->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_SQ_SHIFT_M, V2_QPC_BYTE_20_SQ_SHIFT_S, 0);
|
||||
|
||||
roce_set_field(context->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_RQ_SHIFT_M, V2_QPC_BYTE_20_RQ_SHIFT_S,
|
||||
(hr_qp->ibqp.qp_type == IB_QPT_XRC_INI ||
|
||||
hr_qp->ibqp.qp_type == IB_QPT_XRC_TGT || ibqp->srq) ? 0 :
|
||||
ilog2((unsigned int)hr_qp->rq.wqe_cnt));
|
||||
roce_set_field(qpc_mask->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_RQ_SHIFT_M, V2_QPC_BYTE_20_RQ_SHIFT_S, 0);
|
||||
set_qpc_wqe_cnt(hr_qp, context, qpc_mask);
|
||||
|
||||
/* No VLAN need to set 0xFFF */
|
||||
roce_set_field(context->byte_24_mtu_tc, V2_QPC_BYTE_24_VLAN_ID_M,
|
||||
@ -3456,22 +3466,6 @@ static void modify_qp_init_to_init(struct ib_qp *ibqp,
|
||||
roce_set_field(qpc_mask->byte_4_sqpn_tst, V2_QPC_BYTE_4_TST_M,
|
||||
V2_QPC_BYTE_4_TST_S, 0);
|
||||
|
||||
if (ibqp->qp_type == IB_QPT_GSI)
|
||||
roce_set_field(context->byte_4_sqpn_tst,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S,
|
||||
ilog2((unsigned int)hr_qp->sge.sge_cnt));
|
||||
else
|
||||
roce_set_field(context->byte_4_sqpn_tst,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S,
|
||||
hr_qp->sq.max_gs >
|
||||
HNS_ROCE_V2_UC_RC_SGE_NUM_IN_WQE ?
|
||||
ilog2((unsigned int)hr_qp->sge.sge_cnt) : 0);
|
||||
|
||||
roce_set_field(qpc_mask->byte_4_sqpn_tst, V2_QPC_BYTE_4_SGE_SHIFT_M,
|
||||
V2_QPC_BYTE_4_SGE_SHIFT_S, 0);
|
||||
|
||||
if (attr_mask & IB_QP_ACCESS_FLAGS) {
|
||||
roce_set_bit(context->byte_76_srqn_op_en, V2_QPC_BYTE_76_RRE_S,
|
||||
!!(attr->qp_access_flags & IB_ACCESS_REMOTE_READ));
|
||||
@ -3506,20 +3500,6 @@ static void modify_qp_init_to_init(struct ib_qp *ibqp,
|
||||
0);
|
||||
}
|
||||
|
||||
roce_set_field(context->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_SQ_SHIFT_M, V2_QPC_BYTE_20_SQ_SHIFT_S,
|
||||
ilog2((unsigned int)hr_qp->sq.wqe_cnt));
|
||||
roce_set_field(qpc_mask->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_SQ_SHIFT_M, V2_QPC_BYTE_20_SQ_SHIFT_S, 0);
|
||||
|
||||
roce_set_field(context->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_RQ_SHIFT_M, V2_QPC_BYTE_20_RQ_SHIFT_S,
|
||||
(hr_qp->ibqp.qp_type == IB_QPT_XRC_INI ||
|
||||
hr_qp->ibqp.qp_type == IB_QPT_XRC_TGT || ibqp->srq) ? 0 :
|
||||
ilog2((unsigned int)hr_qp->rq.wqe_cnt));
|
||||
roce_set_field(qpc_mask->byte_20_smac_sgid_idx,
|
||||
V2_QPC_BYTE_20_RQ_SHIFT_M, V2_QPC_BYTE_20_RQ_SHIFT_S, 0);
|
||||
|
||||
roce_set_field(context->byte_16_buf_ba_pg_sz, V2_QPC_BYTE_16_PD_M,
|
||||
V2_QPC_BYTE_16_PD_S, to_hr_pd(ibqp->pd)->pdn);
|
||||
roce_set_field(qpc_mask->byte_16_buf_ba_pg_sz, V2_QPC_BYTE_16_PD_M,
|
||||
|
Loading…
x
Reference in New Issue
Block a user