[openib-general] [PATCH] The ibv_cmd_* create functions need to set the context.

Steve Wise swise at opengridcomputing.com
Fri Jan 19 13:16:59 PST 2007


From: Steve Wise <swise at opengridcomputing.com>

If the ibv_cmd_* create function succeeds, then the object context pointer
must be set by that function so that the corresponding destroy function
will work.

Signed-off-by: Steve Wise <swise at opengridcomputing.com>
---

 src/cmd.c   |   21 ++++++++++++++-------
 src/verbs.c |   16 ++--------------
 2 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/src/cmd.c b/src/cmd.c
index b267603..f7d3fde 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -209,7 +209,8 @@ int ibv_cmd_alloc_pd(struct ibv_context 
 
 	VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
 
-	pd->handle = resp->pd_handle;
+	pd->handle  = resp->pd_handle;
+	pd->context = context;
 
 	return 0;
 }
@@ -250,6 +251,7 @@ int ibv_cmd_reg_mr(struct ibv_pd *pd, vo
 	mr->handle  = resp->mr_handle;
 	mr->lkey    = resp->lkey;
 	mr->rkey    = resp->rkey;
+	mr->context = pd->context;
 
 	return 0;
 }
@@ -289,8 +291,9 @@ static int ibv_cmd_create_cq_v2(struct i
 
 	VALGRIND_MAKE_MEM_DEFINED(resp, sizeof resp_size);
 
-	cq->handle = resp->cq_handle;
-	cq->cqe    = resp->cqe;
+	cq->handle  = resp->cq_handle;
+	cq->cqe     = resp->cqe;
+	cq->context = context;
 
 	return 0;
 }
@@ -317,8 +320,9 @@ int ibv_cmd_create_cq(struct ibv_context
 
 	VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
 
-	cq->handle = resp->cq_handle;
-	cq->cqe    = resp->cqe;
+	cq->handle  = resp->cq_handle;
+	cq->cqe     = resp->cqe;
+	cq->context = context;
 
 	return 0;
 }
@@ -458,7 +462,8 @@ int ibv_cmd_create_srq(struct ibv_pd *pd
 
 	VALGRIND_MAKE_MEM_DEFINED(resp, resp_size);
 
-	srq->handle = resp->srq_handle;
+	srq->handle  = resp->srq_handle;
+	srq->context = pd->context;
 
 	if (abi_ver > 5) {
 		attr->attr.max_wr = resp->max_wr;
@@ -607,6 +612,7 @@ int ibv_cmd_create_qp(struct ibv_pd *pd,
 
 	qp->handle 		  = resp->qp_handle;
 	qp->qp_num 		  = resp->qpn;
+	qp->context		  = pd->context;
 
 	if (abi_ver > 3) {
 		attr->cap.max_recv_sge    = resp->max_recv_sge;
@@ -1025,7 +1031,8 @@ int ibv_cmd_create_ah(struct ibv_pd *pd,
 
 	VALGRIND_MAKE_MEM_DEFINED(&resp, sizeof resp);
 
-	ah->handle = resp.handle;
+	ah->handle  = resp.handle;
+	ah->context = pd->context;
 
 	return 0;
 }
diff --git a/src/verbs.c b/src/verbs.c
index 6ac56d3..f719572 100644
--- a/src/verbs.c
+++ b/src/verbs.c
@@ -134,13 +134,7 @@ int ibv_query_pkey(struct ibv_context *c
 
 struct ibv_pd *ibv_alloc_pd(struct ibv_context *context)
 {
-	struct ibv_pd *pd;
-
-	pd = context->ops.alloc_pd(context);
-	if (pd)
-		pd->context = context;
-
-	return pd;
+	return context->ops.alloc_pd(context);
 }
 
 int ibv_dealloc_pd(struct ibv_pd *pd)
@@ -158,7 +152,6 @@ struct ibv_mr *ibv_reg_mr(struct ibv_pd 
 
 	mr = pd->context->ops.reg_mr(pd, addr, length, access);
 	if (mr) {
-		mr->context = pd->context;
 		mr->pd      = pd;
 		mr->addr    = addr;
 		mr->length  = length;
@@ -248,7 +241,6 @@ struct ibv_cq *ibv_create_cq(struct ibv_
 						   comp_vector);
 
 	if (cq) {
-		cq->context    	     	   = context;
 		cq->cq_context 	     	   = cq_context;
 		cq->comp_events_completed  = 0;
 		cq->async_events_completed = 0;
@@ -308,7 +300,6 @@ struct ibv_srq *ibv_create_srq(struct ib
 
 	srq = pd->context->ops.create_srq(pd, srq_init_attr);
 	if (srq) {
-		srq->context          = pd->context;
 		srq->srq_context      = srq_init_attr->srq_context;
 		srq->pd               = pd;
 		srq->events_completed = 0;
@@ -342,7 +333,6 @@ struct ibv_qp *ibv_create_qp(struct ibv_
 	struct ibv_qp *qp = pd->context->ops.create_qp(pd, qp_init_attr);
 
 	if (qp) {
-		qp->context    	     = pd->context;
 		qp->qp_context 	     = qp_init_attr->qp_context;
 		qp->pd         	     = pd;
 		qp->send_cq    	     = qp_init_attr->send_cq;
@@ -397,10 +387,8 @@ struct ibv_ah *ibv_create_ah(struct ibv_
 {
 	struct ibv_ah *ah = pd->context->ops.create_ah(pd, attr);
 
-	if (ah) {
-		ah->context = pd->context;
+	if (ah)
 		ah->pd      = pd;
-	}
 
 	return ah;
 }




More information about the general mailing list