mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
RDMA/hns: Support cqe inline in user space
Enable the CQEIE field and configure the CQEIS field of QPC. And add compatibility handling. Link: https://lore.kernel.org/r/20221224102201.3114536-4-xuhaoyue1@hisilicon.com Signed-off-by: Luoyouming <luoyouming@huawei.com> Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
2bb185c68b
commit
1d91855304
@ -144,6 +144,7 @@ enum {
|
||||
HNS_ROCE_CAP_FLAG_DIRECT_WQE = BIT(12),
|
||||
HNS_ROCE_CAP_FLAG_SDI_MODE = BIT(14),
|
||||
HNS_ROCE_CAP_FLAG_STASH = BIT(17),
|
||||
HNS_ROCE_CAP_FLAG_CQE_INLINE = BIT(19),
|
||||
};
|
||||
|
||||
#define HNS_ROCE_DB_TYPE_COUNT 2
|
||||
|
@ -4704,6 +4704,18 @@ static int modify_qp_init_to_rtr(struct ib_qp *ibqp,
|
||||
hr_reg_clear(qpc_mask, QPC_RQIE);
|
||||
}
|
||||
|
||||
if (udata &&
|
||||
(ibqp->qp_type == IB_QPT_RC || ibqp->qp_type == IB_QPT_XRC_TGT) &&
|
||||
(uctx->config & HNS_ROCE_CQE_INLINE_FLAGS)) {
|
||||
hr_reg_write_bool(context, QPC_CQEIE,
|
||||
hr_dev->caps.flags &
|
||||
HNS_ROCE_CAP_FLAG_CQE_INLINE);
|
||||
hr_reg_clear(qpc_mask, QPC_CQEIE);
|
||||
|
||||
hr_reg_write(context, QPC_CQEIS, 0);
|
||||
hr_reg_clear(qpc_mask, QPC_CQEIS);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -531,7 +531,8 @@ struct hns_roce_v2_qp_context {
|
||||
#define QPC_RQ_RTY_TX_ERR QPC_FIELD_LOC(607, 607)
|
||||
#define QPC_RX_CQN QPC_FIELD_LOC(631, 608)
|
||||
#define QPC_XRC_QP_TYPE QPC_FIELD_LOC(632, 632)
|
||||
#define QPC_RSV3 QPC_FIELD_LOC(634, 633)
|
||||
#define QPC_CQEIE QPC_FIELD_LOC(633, 633)
|
||||
#define QPC_CQEIS QPC_FIELD_LOC(634, 634)
|
||||
#define QPC_MIN_RNR_TIME QPC_FIELD_LOC(639, 635)
|
||||
#define QPC_RQ_PRODUCER_IDX QPC_FIELD_LOC(655, 640)
|
||||
#define QPC_RQ_CONSUMER_IDX QPC_FIELD_LOC(671, 656)
|
||||
|
@ -385,6 +385,12 @@ static int hns_roce_alloc_ucontext(struct ib_ucontext *uctx,
|
||||
resp.config |= HNS_ROCE_RSP_RQ_INLINE_FLAGS;
|
||||
}
|
||||
|
||||
if (hr_dev->caps.flags & HNS_ROCE_CAP_FLAG_CQE_INLINE) {
|
||||
context->config |= ucmd.config & HNS_ROCE_CQE_INLINE_FLAGS;
|
||||
if (context->config & HNS_ROCE_CQE_INLINE_FLAGS)
|
||||
resp.config |= HNS_ROCE_RSP_CQE_INLINE_FLAGS;
|
||||
}
|
||||
|
||||
ret = hns_roce_uar_alloc(hr_dev, &context->uar);
|
||||
if (ret)
|
||||
goto error_fail_uar_alloc;
|
||||
|
@ -88,11 +88,13 @@ struct hns_roce_ib_create_qp_resp {
|
||||
enum {
|
||||
HNS_ROCE_EXSGE_FLAGS = 1 << 0,
|
||||
HNS_ROCE_RQ_INLINE_FLAGS = 1 << 1,
|
||||
HNS_ROCE_CQE_INLINE_FLAGS = 1 << 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
HNS_ROCE_RSP_EXSGE_FLAGS = 1 << 0,
|
||||
HNS_ROCE_RSP_RQ_INLINE_FLAGS = 1 << 1,
|
||||
HNS_ROCE_RSP_CQE_INLINE_FLAGS = 1 << 2,
|
||||
};
|
||||
|
||||
struct hns_roce_ib_alloc_ucontext_resp {
|
||||
|
Loading…
Reference in New Issue
Block a user