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
