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:
|
||||
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) {
|
||||
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_recv_sge = qp->rq.max_gs;
|
||||
qp_attr->cap.max_inline_data = (1 << qp->sq.wqe_shift) -
|
||||
send_wqe_overhead(qp->ibqp.qp_type) -
|
||||
sizeof (struct mlx4_wqe_inline_seg);
|
||||
qp_init_attr->cap = qp_attr->cap;
|
||||
qp_attr->cap.max_send_wr = qp->sq.wqe_cnt;
|
||||
qp_attr->cap.max_send_sge = qp->sq.max_gs;
|
||||
} else {
|
||||
qp_attr->cap.max_send_wr = 0;
|
||||
qp_attr->cap.max_send_sge = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue