Bottom: b66e97fee148aae0ef83ec03c25a6d56d444f6ea
-Top: 6959e49c2b6f7ac0f35d98c0dccbcba4838f0d5d
+Top: 1a16e3381c4b7dbc2761fffbde96a85542425f8d
Author: Sean Hefty <sean.hefty@intel.com>
Date: 2012-09-19 09:19:59 -0700
---
diff --git a/include/infiniband/driver.h b/include/infiniband/driver.h
-index 6afd93b..b47a510 100644
+index 6afd93b..7c551b8 100644
--- a/include/infiniband/driver.h
+++ b/include/infiniband/driver.h
@@ -164,6 +164,10 @@ 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 ibv_xrcd *xrcd,
-+ struct ibv_qp *qp, struct ibv_qp_open_attr *attr,
++int ibv_cmd_open_qp(struct verbs_xrcd *xrcd,
++ 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);
int ibv_cmd_query_qp(struct ibv_qp *qp, struct ibv_qp_attr *qp_attr,
struct ibv_destroy_cq_v1 {
diff --git a/include/infiniband/verbs.h b/include/infiniband/verbs.h
-index 799822d..3c4cbe8 100644
+index 799822d..d0c3e1d 100644
--- a/include/infiniband/verbs.h
+++ b/include/infiniband/verbs.h
@@ -484,6 +484,20 @@ struct ibv_qp_init_attr_ex {
struct ibv_qp * (*create_qp_ex)(struct ibv_context *context,
struct ibv_qp_init_attr_ex *qp_init_attr_ex);
uint32_t (*get_srq_num)(struct ibv_srq *srq);
-@@ -1160,6 +1177,12 @@ ibv_create_qp_ex(struct ibv_context *context, struct ibv_qp_init_attr_ex *qp_ini
+@@ -1160,6 +1177,20 @@ ibv_create_qp_ex(struct ibv_context *context, struct ibv_qp_init_attr_ex *qp_ini
}
/**
+ * ibv_open_qp - Open a shareable queue pair.
+ */
-+struct ibv_qp *ibv_open_qp(struct ibv_xrcd *xrcd,
-+ struct ibv_qp_open_attr *qp_open_attr);
++static inline struct ibv_qp *
++ibv_open_qp(struct ibv_xrcd *xrcd, struct ibv_qp_open_attr *qp_open_attr);
++{
++ struct verbs_context *vctx = verbs_get_ctx_op(xrcd->context, open_qp);
++ if (!vctx) {
++ errno = ENOSYS;
++ return NULL;
++ }
++ return vctx->open_qp(context, qp_open_attr);
++}
+
+/**
* ibv_modify_qp - Modify a queue pair.
*/
int ibv_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
diff --git a/src/cmd.c b/src/cmd.c
-index 3bde238..75afdc2 100644
+index 3bde238..da13177 100644
--- a/src/cmd.c
+++ b/src/cmd.c
-@@ -797,6 +797,28 @@ int ibv_cmd_create_qp(struct ibv_pd *pd,
+@@ -797,6 +797,41 @@ int ibv_cmd_create_qp(struct ibv_pd *pd,
return 0;
}
-+int ibv_cmd_open_qp(struct ibv_xrcd *xrcd, struct ibv_qp *qp,
++int ibv_cmd_open_qp(struct verbs_xrcd *xrcd, 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)
+
+ VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
+
-+ qp->handle = resp->qp_handle;
++ qp->qp.handle = resp->qp_handle;
++ qp->qp.context = xrcd->xrcd.context;
++ qp->qp.qp_context = qp_open_attr->qp_context;
++ qp->qp.pd = NULL;
++ qp->qp.send_cq = qp->qp.recv_cq = NULL;
++ qp->qp.srq = NULL;
++ qp->qp.qp_num = qp_open_attr->qp_num;
++ qp->qp.qp_type = qp_open_attr->qp_type;
++ qp->qp.state = IBV_QPS_UNKNOWN;
++ qp->qp.events_completed = 0;
++ pthread_mutex_init(&qp->qp.mutex, NULL);
++ pthread_cond_init(&qp->qp.cond, NULL);
++ qp->comp_mask = IBV_QP_XRCD;
++ qp->xrcd = xrcd;
+
+ return 0;
+}
int attr_mask,
struct ibv_qp_init_attr *init_attr,
diff --git a/src/libibverbs.map b/src/libibverbs.map
-index 4249793..c9b29c6 100644
+index 4249793..5ad8312 100644
--- a/src/libibverbs.map
+++ b/src/libibverbs.map
-@@ -102,5 +102,7 @@ IBVERBS_1.1 {
+@@ -102,5 +102,6 @@ IBVERBS_1.1 {
ibv_cmd_close_xrcd;
ibv_cmd_create_srq_ex;
ibv_cmd_create_qp_ex;
-+ ibv_open_qp;
+ ibv_cmd_open_qp;
} IBVERBS_1.0;
-diff --git a/src/verbs.c b/src/verbs.c
-index b5938f2..dbb2210 100644
---- a/src/verbs.c
-+++ b/src/verbs.c
-@@ -418,6 +418,42 @@ struct ibv_qp *__ibv_create_qp(struct ibv_pd *pd,
- }
- default_symver(__ibv_create_qp, ibv_create_qp);
-
-+struct ibv_qp *__ibv_open_qp(struct ibv_xrcd *xrcd,
-+ struct ibv_qp_open_attr *qp_open_attr)
-+{
-+ struct verbs_context *context_ex;
-+ struct ibv_qp *qp;
-+
-+ context_ex = verbs_get_ctx(xrcd->context);
-+ if (!context_ex->open_qp ||
-+ qp_open_attr->comp_mask >= IBV_QP_OPEN_ATTR_RESERVED) {
-+ errno = ENOSYS;
-+ return NULL;
-+ }
-+
-+ qp = context_ex->open_qp(xrcd, qp_open_attr);
-+ if (qp) {
-+ qp->context = xrcd->context;
-+ qp->qp_context = qp_open_attr->qp_context;
-+
-+ qp->pd = NULL;
-+ qp->send_cq = qp->recv_cq = NULL;
-+ qp->srq = NULL;
-+ qp->comp_mask |= IBV_QP_XRCD;
-+ qp->xrcd = xrcd;
-+
-+ qp->qp_num = qp_open_attr->qp_num;
-+ qp->qp_type = qp_open_attr->qp_type;
-+ qp->state = IBV_QPS_UNKNOWN;
-+ qp->events_completed = 0;
-+ pthread_mutex_init(&qp->mutex, NULL);
-+ pthread_cond_init(&qp->cond, NULL);
-+ }
-+
-+ return qp;
-+}
-+default_symver(__ibv_open_qp, ibv_open_qp);
-+
- int __ibv_query_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
- int attr_mask,
- struct ibv_qp_init_attr *init_attr)
+++ /dev/null
-Bottom: 6959e49c2b6f7ac0f35d98c0dccbcba4838f0d5d
-Top: 1a16e3381c4b7dbc2761fffbde96a85542425f8d
-Author: Sean Hefty <sean.hefty@intel.com>
-Date: 2012-09-26 14:13:38 -0700
-
-Refresh of open_qp
-
----
-
-diff --git a/include/infiniband/driver.h b/include/infiniband/driver.h
-index b47a510..7c551b8 100644
---- a/include/infiniband/driver.h
-+++ b/include/infiniband/driver.h
-@@ -164,8 +164,8 @@ 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 ibv_xrcd *xrcd,
-- struct ibv_qp *qp, struct ibv_qp_open_attr *attr,
-+int ibv_cmd_open_qp(struct verbs_xrcd *xrcd,
-+ 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);
- int ibv_cmd_query_qp(struct ibv_qp *qp, struct ibv_qp_attr *qp_attr,
-diff --git a/include/infiniband/verbs.h b/include/infiniband/verbs.h
-index 3c4cbe8..d0c3e1d 100644
---- a/include/infiniband/verbs.h
-+++ b/include/infiniband/verbs.h
-@@ -1179,8 +1179,16 @@ ibv_create_qp_ex(struct ibv_context *context, struct ibv_qp_init_attr_ex *qp_ini
- /**
- * ibv_open_qp - Open a shareable queue pair.
- */
--struct ibv_qp *ibv_open_qp(struct ibv_xrcd *xrcd,
-- struct ibv_qp_open_attr *qp_open_attr);
-+static inline struct ibv_qp *
-+ibv_open_qp(struct ibv_xrcd *xrcd, struct ibv_qp_open_attr *qp_open_attr);
-+{
-+ struct verbs_context *vctx = verbs_get_ctx_op(xrcd->context, open_qp);
-+ if (!vctx) {
-+ errno = ENOSYS;
-+ return NULL;
-+ }
-+ return vctx->open_qp(context, qp_open_attr);
-+}
-
- /**
- * ibv_modify_qp - Modify a queue pair.
-diff --git a/src/cmd.c b/src/cmd.c
-index 75afdc2..da13177 100644
---- a/src/cmd.c
-+++ b/src/cmd.c
-@@ -797,7 +797,7 @@ int ibv_cmd_create_qp(struct ibv_pd *pd,
- return 0;
- }
-
--int ibv_cmd_open_qp(struct ibv_xrcd *xrcd, struct ibv_qp *qp,
-+int ibv_cmd_open_qp(struct verbs_xrcd *xrcd, 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)
-@@ -814,7 +814,20 @@ int ibv_cmd_open_qp(struct ibv_xrcd *xrcd, struct ibv_qp *qp,
-
- VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
-
-- qp->handle = resp->qp_handle;
-+ qp->qp.handle = resp->qp_handle;
-+ qp->qp.context = xrcd->xrcd.context;
-+ qp->qp.qp_context = qp_open_attr->qp_context;
-+ qp->qp.pd = NULL;
-+ qp->qp.send_cq = qp->qp.recv_cq = NULL;
-+ qp->qp.srq = NULL;
-+ qp->qp.qp_num = qp_open_attr->qp_num;
-+ qp->qp.qp_type = qp_open_attr->qp_type;
-+ qp->qp.state = IBV_QPS_UNKNOWN;
-+ qp->qp.events_completed = 0;
-+ pthread_mutex_init(&qp->qp.mutex, NULL);
-+ pthread_cond_init(&qp->qp.cond, NULL);
-+ qp->comp_mask = IBV_QP_XRCD;
-+ qp->xrcd = xrcd;
-
- return 0;
- }
-diff --git a/src/libibverbs.map b/src/libibverbs.map
-index c9b29c6..5ad8312 100644
---- a/src/libibverbs.map
-+++ b/src/libibverbs.map
-@@ -102,7 +102,6 @@ IBVERBS_1.1 {
- ibv_cmd_close_xrcd;
- ibv_cmd_create_srq_ex;
- ibv_cmd_create_qp_ex;
-- ibv_open_qp;
- ibv_cmd_open_qp;
-
- } IBVERBS_1.0;
-diff --git a/src/verbs.c b/src/verbs.c
-index dbb2210..b5938f2 100644
---- a/src/verbs.c
-+++ b/src/verbs.c
-@@ -418,42 +418,6 @@ struct ibv_qp *__ibv_create_qp(struct ibv_pd *pd,
- }
- default_symver(__ibv_create_qp, ibv_create_qp);
-
--struct ibv_qp *__ibv_open_qp(struct ibv_xrcd *xrcd,
-- struct ibv_qp_open_attr *qp_open_attr)
--{
-- struct verbs_context *context_ex;
-- struct ibv_qp *qp;
--
-- context_ex = verbs_get_ctx(xrcd->context);
-- if (!context_ex->open_qp ||
-- qp_open_attr->comp_mask >= IBV_QP_OPEN_ATTR_RESERVED) {
-- errno = ENOSYS;
-- return NULL;
-- }
--
-- qp = context_ex->open_qp(xrcd, qp_open_attr);
-- if (qp) {
-- qp->context = xrcd->context;
-- qp->qp_context = qp_open_attr->qp_context;
--
-- qp->pd = NULL;
-- qp->send_cq = qp->recv_cq = NULL;
-- qp->srq = NULL;
-- qp->comp_mask |= IBV_QP_XRCD;
-- qp->xrcd = xrcd;
--
-- qp->qp_num = qp_open_attr->qp_num;
-- qp->qp_type = qp_open_attr->qp_type;
-- qp->state = IBV_QPS_UNKNOWN;
-- qp->events_completed = 0;
-- pthread_mutex_init(&qp->mutex, NULL);
-- pthread_cond_init(&qp->cond, NULL);
-- }
--
-- return qp;
--}
--default_symver(__ibv_open_qp, ibv_open_qp);
--
- int __ibv_query_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
- int attr_mask,
- struct ibv_qp_init_attr *init_attr)