[openib-general] [PATCH 1/2] [RFC] Implement resize of CQ

Sean Hefty mshefty at ichips.intel.com
Wed Nov 3 16:54:46 PST 2004


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.




More information about the general mailing list