]> git.openfabrics.org - ~shefty/libibverbs.git/commitdiff
Refresh of srq_ex
authorSean Hefty <sean.hefty@intel.com>
Thu, 27 Sep 2012 18:12:58 +0000 (11:12 -0700)
committerSean Hefty <sean.hefty@intel.com>
Thu, 27 Sep 2012 18:12:58 +0000 (11:12 -0700)
include/infiniband/driver.h
include/infiniband/verbs.h
src/cmd.c

index dccfd1fa376d64d9bd9deddd6b1296828d61d7ad..8a1535afd6028be8ecccf1569780e70dd6e63558 100644 (file)
@@ -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);
index e67bf21ed00016b4d86907302363be2936889f3a..0a29c9bd89b5c55666845b44e6dc8118b4dffbd3 100644 (file)
@@ -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);
 }
 
 /**
index c3c6f537f4c140b336544c098e9fee40ef8bf482..89cebbe53b26e149464211b7f9593de90c1a2981 100644 (file)
--- 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;