From be692caba145cf2aa07ace9ea649289be518faf3 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Thu, 27 Sep 2012 11:12:58 -0700 Subject: [PATCH] Refresh of srq_ex --- include/infiniband/driver.h | 2 +- include/infiniband/verbs.h | 17 ++++++++++------- src/cmd.c | 11 +++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/infiniband/driver.h b/include/infiniband/driver.h index dccfd1f..8a1535a 100644 --- a/include/infiniband/driver.h +++ b/include/infiniband/driver.h @@ -133,7 +133,7 @@ int ibv_cmd_create_srq(struct ibv_pd *pd, struct ibv_srq *srq, struct ibv_srq_init_attr *attr, struct ibv_create_srq *cmd, size_t cmd_size, struct ibv_create_srq_resp *resp, size_t resp_size); -int ibv_cmd_create_srq_ex(struct ibv_pd *pd, +int ibv_cmd_create_srq_ex(struct verbs_context *context, struct verbs_srq *srq, struct ibv_srq_init_attr_ex *attr_ex, struct ibv_create_xsrq *cmd, size_t cmd_size, struct ibv_create_srq_resp *resp, size_t resp_size); diff --git a/include/infiniband/verbs.h b/include/infiniband/verbs.h index e67bf21..0a29c9b 100644 --- a/include/infiniband/verbs.h +++ b/include/infiniband/verbs.h @@ -422,9 +422,10 @@ enum ibv_srq_type { enum ibv_srq_init_attr_mask { IBV_SRQ_INIT_ATTR_TYPE = 1 << 0, - IBV_SRQ_INIT_ATTR_XRCD = 1 << 1, - IBV_SRQ_INIT_ATTR_CQ = 1 << 2, - IBV_SRQ_INIT_ATTR_RESERVED = 1 << 3 + IBV_SRQ_INIT_ATTR_PD = 1 << 1 + IBV_SRQ_INIT_ATTR_XRCD = 1 << 2, + IBV_SRQ_INIT_ATTR_CQ = 1 << 3, + IBV_SRQ_INIT_ATTR_RESERVED = 1 << 4 }; struct ibv_srq_init_attr_ex { @@ -433,6 +434,7 @@ struct ibv_srq_init_attr_ex { uint64_t comp_mask; enum ibv_srq_type srq_type; + struct ibv_pd *pd; struct ibv_xrcd *xrcd; struct ibv_cq *cq; }; @@ -760,7 +762,7 @@ struct verbs_context { int (*lib_new_func1) (); New library call func1 */ uint32_t (*get_srq_num)(struct ibv_srq *srq); - struct ibv_srq * (*create_srq_ex)(struct ibv_pd *pd, + struct ibv_srq * (*create_srq_ex)(struct ibv_context *context, struct ibv_srq_init_attr_ex *srq_init_attr_ex); struct ibv_xrcd * (*open_xrcd)(struct ibv_context *context, int fd, int oflags); @@ -1048,14 +1050,15 @@ struct ibv_srq *ibv_create_srq(struct ibv_pd *pd, struct ibv_srq_init_attr *srq_init_attr); static inline struct ibv_srq * -ibv_create_srq_ex(struct ibv_pd *pd, struct ibv_srq_init_attr_ex *srq_init_attr_ex) +ibv_create_srq_ex(struct ibv_context *context, + struct ibv_srq_init_attr_ex *srq_init_attr_ex) { - struct verbs_context *vctx = verbs_get_ctx_op(pd->context, create_srq_ex); + struct verbs_context *vctx = verbs_get_ctx_op(context, create_srq_ex); if (!vctx) { errno = ENOSYS; return NULL; } - return vctx->create_srq_ex(pd, srq_init_attr_ex); + return vctx->create_srq_ex(context, srq_init_attr_ex); } /** diff --git a/src/cmd.c b/src/cmd.c index c3c6f53..89cebbe 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -481,7 +481,7 @@ int ibv_cmd_create_srq(struct ibv_pd *pd, return 0; } -int ibv_cmd_create_srq_ex(struct ibv_pd *pd, +int ibv_cmd_create_srq_ex(struct verbs_context *context, struct verbs_srq *srq, struct ibv_srq_init_attr_ex *attr_ex, struct ibv_create_xsrq *cmd, size_t cmd_size, struct ibv_create_srq_resp *resp, size_t resp_size) @@ -493,8 +493,11 @@ int ibv_cmd_create_srq_ex(struct ibv_pd *pd, if (attr_ex->comp_mask >= IBV_SRQ_INIT_ATTR_RESERVED) return ENOSYS; + if (!(attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_PD)) + return EINVAL; + cmd->user_handle = (uintptr_t) srq; - cmd->pd_handle = pd->handle; + cmd->pd_handle = attr_ex->pd->handle; cmd->max_wr = attr_ex->attr.max_wr; cmd->max_sge = attr_ex->attr.max_sge; cmd->srq_limit = attr_ex->attr.srq_limit; @@ -508,13 +511,13 @@ int ibv_cmd_create_srq_ex(struct ibv_pd *pd, if (attr_ex->comp_mask & IBV_SRQ_INIT_ATTR_CQ) cmd->cq_handle = attr_ex->cq->handle; - if (write(pd->context->cmd_fd, cmd, cmd_size) != cmd_size) + if (write(context->cmd_fd, cmd, cmd_size) != cmd_size) return errno; VALGRIND_MAKE_MEM_DEFINED(resp, resp_size); srq->srq.handle = resp->srq_handle; - srq->srq.context = pd->context; + srq->srq.context = &context->context; srq->srq.srq_context = attr_ex->srq_context; srq->srq.pd = pd; srq->srq.events_completed = 0; -- 2.46.0