mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-03 17:40:04 +00:00
RDMA/qedr: Add EDPM mode type for user-fw compatibility
In older FW versions the completion flag was treated as the ack flag in edpm messages. commitff937b916e
("qed: Add EDPM mode type for user-fw compatibility") exposed the FW option of setting which mode the QP is in by adding a flag to the qedr <-> qed API. This patch adds the qedr <-> libqedr interface so that the libqedr can set the flag appropriately and qedr can pass it down to FW. Flag is added for backward compatibility with libqedr. For older libs, this flag didn't exist and therefore set to zero. Fixes:ac1b36e55a
("qedr: Add support for user context verbs") Link: https://lore.kernel.org/r/20200707063100.3811-2-michal.kalderon@marvell.com Signed-off-by: Yuval Bason <yuval.bason@marvell.com> Signed-off-by: Michal Kalderon <michal.kalderon@marvell.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
This commit is contained in:
parent
3e9fed7fb6
commit
bbe4f42452
3 changed files with 11 additions and 5 deletions
|
@ -235,6 +235,7 @@ struct qedr_ucontext {
|
|||
u32 dpi_size;
|
||||
u16 dpi;
|
||||
bool db_rec;
|
||||
u8 edpm_mode;
|
||||
};
|
||||
|
||||
union db_prod32 {
|
||||
|
|
|
@ -275,7 +275,8 @@ int qedr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata)
|
|||
DP_ERR(dev, "Problem copying data from user space\n");
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
ctx->edpm_mode = !!(ureq.context_flags &
|
||||
QEDR_ALLOC_UCTX_EDPM_MODE);
|
||||
ctx->db_rec = !!(ureq.context_flags & QEDR_ALLOC_UCTX_DB_REC);
|
||||
}
|
||||
|
||||
|
@ -316,7 +317,8 @@ int qedr_alloc_ucontext(struct ib_ucontext *uctx, struct ib_udata *udata)
|
|||
uresp.dpm_flags = QEDR_DPM_TYPE_IWARP_LEGACY;
|
||||
else
|
||||
uresp.dpm_flags = QEDR_DPM_TYPE_ROCE_ENHANCED |
|
||||
QEDR_DPM_TYPE_ROCE_LEGACY;
|
||||
QEDR_DPM_TYPE_ROCE_LEGACY |
|
||||
QEDR_DPM_TYPE_ROCE_EDPM_MODE;
|
||||
|
||||
uresp.dpm_flags |= QEDR_DPM_SIZES_SET;
|
||||
uresp.ldpm_limit_size = QEDR_LDPM_MAX_SIZE;
|
||||
|
@ -1750,7 +1752,7 @@ static int qedr_create_user_qp(struct qedr_dev *dev,
|
|||
struct qed_rdma_create_qp_out_params out_params;
|
||||
struct qedr_pd *pd = get_qedr_pd(ibpd);
|
||||
struct qedr_create_qp_uresp uresp;
|
||||
struct qedr_ucontext *ctx = NULL;
|
||||
struct qedr_ucontext *ctx = pd ? pd->uctx : NULL;
|
||||
struct qedr_create_qp_ureq ureq;
|
||||
int alloc_and_init = rdma_protocol_roce(&dev->ibdev, 1);
|
||||
int rc = -EINVAL;
|
||||
|
@ -1788,6 +1790,9 @@ static int qedr_create_user_qp(struct qedr_dev *dev,
|
|||
in_params.rq_pbl_ptr = qp->urq.pbl_tbl->pa;
|
||||
}
|
||||
|
||||
if (ctx)
|
||||
SET_FIELD(in_params.flags, QED_ROCE_EDPM_MODE, ctx->edpm_mode);
|
||||
|
||||
qp->qed_qp = dev->ops->rdma_create_qp(dev->rdma_ctx,
|
||||
&in_params, &out_params);
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
/* user kernel communication data structures. */
|
||||
enum qedr_alloc_ucontext_flags {
|
||||
QEDR_ALLOC_UCTX_RESERVED = 1 << 0,
|
||||
QEDR_ALLOC_UCTX_EDPM_MODE = 1 << 0,
|
||||
QEDR_ALLOC_UCTX_DB_REC = 1 << 1
|
||||
};
|
||||
|
||||
|
@ -56,7 +56,7 @@ enum qedr_rdma_dpm_type {
|
|||
QEDR_DPM_TYPE_ROCE_ENHANCED = 1 << 0,
|
||||
QEDR_DPM_TYPE_ROCE_LEGACY = 1 << 1,
|
||||
QEDR_DPM_TYPE_IWARP_LEGACY = 1 << 2,
|
||||
QEDR_DPM_TYPE_RESERVED = 1 << 3,
|
||||
QEDR_DPM_TYPE_ROCE_EDPM_MODE = 1 << 3,
|
||||
QEDR_DPM_SIZES_SET = 1 << 4,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue