Krishna Kumar wrote:
QP. When I do a query for the QP, all I really need is the qp ptr and
the qp_attr structure to fill in values. What I didn't figure out is
why an attr_mask and ib_qp_init_attr is needed. BTW, I had thought that
ib_qp_init_attr was used for initialization type of attributes, exactly
once the device is passed init attributes, then onwards ib_qp_attr should
be used. So ib_qp_init_attr seems redundant. Or I have understood the
code wrong.

The mask allows the query to be a little more selective about what data it is trying to access, which can potentially avoid accessing the hardware.


The qp_attr and qp_init_attr contain different data, so both are returned from the query call. To have ib_query_qp return only qp_attr, we would need to add the fields from qp_init_attr to it.

If you are not already adding the exact same functionality, please let me
know if the following looks correct. I recreated both patches after Hal's
checkin (Patch1 and Patch2 below).

I am not adding this same functionality, and I'm coding around where your patch would go.


Also, I saw your other mail, and I had looked at the driver and it
didn't modify the final size of the new QP in the init_attr. It used the
structure to do it's work but doesn't update it. I was initially planning
on not using query() and instead rely on this structure getting updated.
The verb interface cannot do it since it qp doesn't contain the size. We
cannot change the driver to change the init structure since potentially
other drivers may not do it, so the reason to do a query to figure the
correct size.

The original call to ib_create_qp took a third parameter, a qp_cap structure, for output. This structure contained the actual QP settings returned from the ib_create_qp call. I assumed that by removing this parameter, the capabilities would be returned directly in the qp_init_attr structure. If this is not the case, then the driver should probably change to do that. This matches what is defined by verbs, so I think that it's safe to do it.


                qp->sq.max    = init_attr->cap.max_send_wr;
                qp->rq.max    = init_attr->cap.max_recv_wr;
                qp->sq.max_gs = init_attr->cap.max_send_sge;
                qp->rq.max_gs = init_attr->cap.max_recv_sge;

err = mthca_alloc_sqp(to_mdev(pd->device), to_mpd(pd),

I haven't looked at the mthca_alloc_sqp call in more detail, but if it doesn't create a QP larger than that specified, then it wouldn't need to change the qp_cap fields.


_______________________________________________
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