[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