[openib-general] [PATCH] mthca: various bug fixes for mthca_query_qp
Jack Morgenstein
jackm at mellanox.co.il
Thu Aug 24 00:12:51 PDT 2006
On Wednesday 23 August 2006 23:25, Roland Dreier wrote:
> > 5. Return the send_cq, receive cq and srq handles. ib_query_qp() needs them
> > (required by IB Spec). ibv_query_qp() overwrites these values in user-space
> > with appropriate user-space values.
>
> > + qp_init_attr->send_cq = ibqp->send_cq;
> > + qp_init_attr->recv_cq = ibqp->recv_cq;
> > + qp_init_attr->srq = ibqp->srq;
>
> I really disagree with this change. It's silly to do this copying
> since the consumer already has the ibqp pointer. And it's especially
> silly to put this in a low-level driver, since there's nothing
> device-specific about it.
>
Note that the same thing is done in user-space (albeit in the verbs layer):
libibverbs/src/cmd.c, lines 678 ff. (procedure ibv_cmd_query_qp() ):
init_attr->send_cq = qp->send_cq;
init_attr->recv_cq = qp->recv_cq;
init_attr->srq = qp->srq;
Either return these values in both kernel and user, or remove them from
the user-space verb.
Regarding putting this in the low level kernel driver, I agree.
A patch for core/verbs.c is given below.
(P.S. IMHO, the correct thing to do is to remove the above lines from cmd.c,
and not return to the user stuff that s/he already has available).
- Jack
-------------
Index: ofed_1_1/drivers/infiniband/core/verbs.c
===================================================================
--- ofed_1_1.orig/drivers/infiniband/core/verbs.c 2006-08-03 14:30:21.000000000 +0300
+++ ofed_1_1/drivers/infiniband/core/verbs.c 2006-08-24 10:03:51.831333000 +0300
@@ -556,9 +556,17 @@ int ib_query_qp(struct ib_qp *qp,
int qp_attr_mask,
struct ib_qp_init_attr *qp_init_attr)
{
- return qp->device->query_qp ?
- qp->device->query_qp(qp, qp_attr, qp_attr_mask, qp_init_attr) :
- -ENOSYS;
+ int rc = -ENOSYS;
+ if (qp->device->query_qp) {
+ rc = qp->device->query_qp(qp, qp_attr,
+ qp_attr_mask, qp_init_attr);
+ if(!rc) {
+ qp_init_attr->recv_cq = qp->recv_cq;
+ qp_init_attr->send_cq = qp->send_cq;
+ qp_init_attr->srq = qp->srq;
+ }
+ }
+ return rc;
}
EXPORT_SYMBOL(ib_query_qp);
More information about the general
mailing list