From: Steve Wise <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
---

 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;
 }

_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to