IB/mlx4: Return receive queue sizes for userspace QPs from query QP
Return the receive queue sizes for both userspace QPs and kernel Qps (not just kernel QPs) from mlx4_ib_query_qp(). Also zero the send queue sizes for userspace QPs to avoid a possible information leak, and set the max_inline_data for kernel QPs to 0 since inline sends are not supported for kernel QPs. Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
c9f2ba5ed2
commit
7f5eb9bb8c
|
@ -1581,17 +1581,25 @@ int mlx4_ib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr, int qp_attr
|
||||||
|
|
||||||
done:
|
done:
|
||||||
qp_attr->cur_qp_state = qp_attr->qp_state;
|
qp_attr->cur_qp_state = qp_attr->qp_state;
|
||||||
|
qp_attr->cap.max_recv_wr = qp->rq.wqe_cnt;
|
||||||
|
qp_attr->cap.max_recv_sge = qp->rq.max_gs;
|
||||||
|
|
||||||
if (!ibqp->uobject) {
|
if (!ibqp->uobject) {
|
||||||
qp_attr->cap.max_send_wr = qp->sq.wqe_cnt;
|
qp_attr->cap.max_send_wr = qp->sq.wqe_cnt;
|
||||||
qp_attr->cap.max_recv_wr = qp->rq.wqe_cnt;
|
qp_attr->cap.max_send_sge = qp->sq.max_gs;
|
||||||
qp_attr->cap.max_send_sge = qp->sq.max_gs;
|
} else {
|
||||||
qp_attr->cap.max_recv_sge = qp->rq.max_gs;
|
qp_attr->cap.max_send_wr = 0;
|
||||||
qp_attr->cap.max_inline_data = (1 << qp->sq.wqe_shift) -
|
qp_attr->cap.max_send_sge = 0;
|
||||||
send_wqe_overhead(qp->ibqp.qp_type) -
|
|
||||||
sizeof (struct mlx4_wqe_inline_seg);
|
|
||||||
qp_init_attr->cap = qp_attr->cap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We don't support inline sends for kernel QPs (yet), and we
|
||||||
|
* don't know what userspace's value should be.
|
||||||
|
*/
|
||||||
|
qp_attr->cap.max_inline_data = 0;
|
||||||
|
|
||||||
|
qp_init_attr->cap = qp_attr->cap;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue