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

index 2b928c27c00912369400f293b803b28f5664582b..fe77ac4b94668e989762b7fe26f4e6d36ee8ba89 100644 (file)
@@ -164,7 +164,7 @@ int ibv_cmd_create_qp_ex(struct verbs_context *context,
                         struct verbs_qp *qp, struct ibv_qp_init_attr_ex *attr_ex,
                         struct ibv_create_qp *cmd, size_t cmd_size,
                         struct ibv_create_qp_resp *resp, size_t resp_size);
-int ibv_cmd_open_qp(struct verbs_xrcd *xrcd,
+int ibv_cmd_open_qp(struct verbs_context *context,
                    struct verbs_qp *qp, struct ibv_qp_open_attr *attr,
                    struct ibv_open_qp *cmd, size_t cmd_size,
                    struct ibv_create_qp_resp *resp, size_t resp_size);
index 1f3f806ea77502e2aa201d9283b2e0b9265bb159..a91662c6f329345ff9a45ecea99aa8f0b4e01b64 100644 (file)
@@ -487,15 +487,17 @@ struct ibv_qp_init_attr_ex {
 };
 
 enum ibv_qp_open_attr_mask {
-       IBV_QP_OPEN_ATTR_CONTEXT        = 1 << 0,
-       IBV_QP_OPEN_ATTR_NUM            = 1 << 1,
-       IBV_QP_OPEN_ATTR_TYPE           = 1 << 2,
-       IBV_QP_OPEN_ATTR_RESERVED       = 1 << 3
+       IBV_QP_OPEN_ATTR_NUM            = 1 << 0,
+       IBV_QP_OPEN_ATTR_CONTEXT        = 1 << 1,
+       IBV_QP_OPEN_ATTR_XRCD           = 1 << 2,
+       IBV_QP_OPEN_ATTR_TYPE           = 1 << 3,
+       IBV_QP_OPEN_ATTR_RESERVED       = 1 << 4
  };
 
 struct ibv_qp_open_attr {
        uint32_t                comp_mask;
        uint32_t                qp_num;
+       struct ibv_xrcd        *xrcd;
        void                   *qp_context;
        enum ibv_qp_type        qp_type;
 };
@@ -804,7 +806,7 @@ struct verbs_context {
        int (*drv_new_func1) ();        new corresponding provider call of func1
        int (*lib_new_func1) ();        New library call func1
        */
-       struct ibv_qp *         (*open_qp)(struct ibv_xrcd *xrcd,
+       struct ibv_qp *         (*open_qp)(struct ibv_context *context,
                                           struct ibv_qp_open_attr *attr);
        struct ibv_qp *         (*create_qp_ex)(struct ibv_context *context,
                                                struct ibv_qp_init_attr_ex *qp_init_attr_ex);
index 704d52e9fe722248c6dfce704b7e9920f3257aad..7f655163bd33bee5c9eae16bd2009cc8fe67fc57 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -800,25 +800,33 @@ int ibv_cmd_create_qp(struct ibv_pd *pd,
        return 0;
 }
 
-int ibv_cmd_open_qp(struct verbs_xrcd *xrcd, struct verbs_qp *qp,
+int ibv_cmd_open_qp(struct verbs_context *context, struct verbs_qp *qp,
                    struct ibv_qp_open_attr *attr,
                    struct ibv_open_qp *cmd, size_t cmd_size,
                    struct ibv_create_qp_resp *resp, size_t resp_size)
 {
        IBV_INIT_CMD_RESP(cmd, cmd_size, OPEN_QP, resp, resp_size);
 
+       if (attr->comp_mask >= IBV_QP_OPEN_ATTR_RESERVED)
+               return ENOSYS;
+
+       if (!(attr->comp_mask & IBV_QP_OPEN_ATTR_XRCD) ||
+           !(attr->comp_mask & IBV_QP_OPEN_ATTR_NUM) ||
+           !(attr->comp_mask & IBV_QP_OPEN_ATTR_TYPE))
+               return EINAL;
+
        cmd->user_handle = (uintptr_t) qp;
-       cmd->pd_handle   = xrcd->handle;
+       cmd->pd_handle   = attr->xrcd->handle;
        cmd->qpn         = attr->qp_num;
        cmd->qp_type     = attr->qp_type;
 
-       if (write(xrcd->xrcd.context->cmd_fd, cmd, cmd_size) != cmd_size)
+       if (write(context->context.cmd_fd, cmd, cmd_size) != cmd_size)
                return errno;
 
        VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
 
        qp->qp.handle     = resp->qp_handle;
-       qp->qp.context    = xrcd->xrcd.context;
+       qp->qp.context    = &context->context;
        qp->qp.qp_context = attr->qp_context;
        qp->qp.pd         = NULL;
        qp->qp.send_cq    = qp->qp.recv_cq = NULL;
@@ -830,7 +838,7 @@ int ibv_cmd_open_qp(struct verbs_xrcd *xrcd, struct verbs_qp *qp,
        pthread_mutex_init(&qp->qp.mutex, NULL);
        pthread_cond_init(&qp->qp.cond, NULL);
        qp->comp_mask     = VERBS_QP_XRCD;
-       qp->xrcd          = xrcd;
+       qp->xrcd          = attr->xrcd;
 
        return 0;
 }