From 46548879b84e8c502198a549d82ec079ebc8b9a0 Mon Sep 17 00:00:00 2001 From: Lang Cheng Date: Thu, 2 Dec 2021 21:44:26 +0800 Subject: libhns: Forcibly rewrite the inline flag of WQE When a non-inline WR reuses a WQE that was used for inline the last time, the remaining inline flag should be cleared. Fixes: cbdf5e32a855 ("libhns: Reimplement verbs of post_send and post_recv for hip08 RoCE") Fixes: 82fc508a6625 ("libhns: Add support for UD inline") Signed-off-by: Lang Cheng Signed-off-by: Wenpeng Liang --- providers/hns/hns_roce_u_hw_v2.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/providers/hns/hns_roce_u_hw_v2.c b/providers/hns/hns_roce_u_hw_v2.c index 18399e9..4eaa929 100644 --- a/providers/hns/hns_roce_u_hw_v2.c +++ b/providers/hns/hns_roce_u_hw_v2.c @@ -876,8 +876,6 @@ static int set_ud_inl(struct hns_roce_qp *qp, const struct ibv_send_wr *wr, if (!check_inl_data_len(qp, sge_info->total_len)) return -EINVAL; - roce_set_bit(ud_sq_wqe->rsv_opcode, UD_SQ_WQE_BYTE_4_INL_S, 1); - if (sge_info->total_len <= HNS_ROCE_MAX_UD_INL_INN_SZ) { roce_set_bit(ud_sq_wqe->rsv_msg_start_sge_idx, UD_SQ_WQE_BYTE_20_INL_TYPE_S, 0); @@ -993,6 +991,8 @@ static int set_ud_wqe(void *wqe, struct hns_roce_qp *qp, struct ibv_send_wr *wr, !!(wr->send_flags & IBV_SEND_SIGNALED)); roce_set_bit(ud_sq_wqe->rsv_opcode, UD_SQ_WQE_SE_S, !!(wr->send_flags & IBV_SEND_SOLICITED)); + roce_set_bit(ud_sq_wqe->rsv_opcode, UD_SQ_WQE_BYTE_4_INL_S, + !!(wr->send_flags & IBV_SEND_INLINE)); ret = check_ud_opcode(ud_sq_wqe, wr); if (ret) @@ -1044,8 +1044,6 @@ static int set_rc_inl(struct hns_roce_qp *qp, const struct ibv_send_wr *wr, dseg += sizeof(struct hns_roce_rc_sq_wqe); - roce_set_bit(rc_sq_wqe->byte_4, RC_SQ_WQE_BYTE_4_INLINE_S, 1); - if (sge_info->total_len <= HNS_ROCE_MAX_RC_INL_INN_SZ) { roce_set_bit(rc_sq_wqe->byte_20, RC_SQ_WQE_BYTE_20_INL_TYPE_S, 0); @@ -1150,13 +1148,13 @@ static int set_rc_wqe(void *wqe, struct hns_roce_qp *qp, struct ibv_send_wr *wr, return ret; roce_set_bit(rc_sq_wqe->byte_4, RC_SQ_WQE_BYTE_4_CQE_S, - (wr->send_flags & IBV_SEND_SIGNALED) ? 1 : 0); - + !!(wr->send_flags & IBV_SEND_SIGNALED)); roce_set_bit(rc_sq_wqe->byte_4, RC_SQ_WQE_BYTE_4_FENCE_S, - (wr->send_flags & IBV_SEND_FENCE) ? 1 : 0); - + !!(wr->send_flags & IBV_SEND_FENCE)); roce_set_bit(rc_sq_wqe->byte_4, RC_SQ_WQE_BYTE_4_SE_S, - (wr->send_flags & IBV_SEND_SOLICITED) ? 1 : 0); + !!(wr->send_flags & IBV_SEND_SOLICITED)); + roce_set_bit(rc_sq_wqe->byte_4, RC_SQ_WQE_BYTE_4_INLINE_S, + !!(wr->send_flags & IBV_SEND_INLINE)); roce_set_field(rc_sq_wqe->byte_20, RC_SQ_WQE_BYTE_20_MSG_START_SGE_IDX_M, -- 2.27.0