IB/mthca: Fix corner cases in max_rd_atomic value handling in modify QP
sae and sre bits should only be set when setting sra_max. Further, in the old code, if the caller specifies max_rd_atomic = 0, the sre and sae bits are still set, with the result that the QP ends up with max_rd_atomic = 1 in effect. Signed-off-by: Jack Morgenstein <jackm@mellanox.co.il> Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Родитель
d1646f86a2
Коммит
c4342d8a4d
|
@ -747,9 +747,7 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
|
|||
qp_context->wqe_lkey = cpu_to_be32(qp->mr.ibmr.lkey);
|
||||
qp_context->params1 = cpu_to_be32((MTHCA_ACK_REQ_FREQ << 28) |
|
||||
(MTHCA_FLIGHT_LIMIT << 24) |
|
||||
MTHCA_QP_BIT_SRE |
|
||||
MTHCA_QP_BIT_SWE |
|
||||
MTHCA_QP_BIT_SAE);
|
||||
MTHCA_QP_BIT_SWE);
|
||||
if (qp->sq_policy == IB_SIGNAL_ALL_WR)
|
||||
qp_context->params1 |= cpu_to_be32(MTHCA_QP_BIT_SSC);
|
||||
if (attr_mask & IB_QP_RETRY_CNT) {
|
||||
|
@ -758,9 +756,13 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
|
|||
}
|
||||
|
||||
if (attr_mask & IB_QP_MAX_QP_RD_ATOMIC) {
|
||||
if (attr->max_rd_atomic)
|
||||
if (attr->max_rd_atomic) {
|
||||
qp_context->params1 |=
|
||||
cpu_to_be32(MTHCA_QP_BIT_SRE |
|
||||
MTHCA_QP_BIT_SAE);
|
||||
qp_context->params1 |=
|
||||
cpu_to_be32(fls(attr->max_rd_atomic - 1) << 21);
|
||||
}
|
||||
qp_param->opt_param_mask |= cpu_to_be32(MTHCA_QP_OPTPAR_SRA_MAX);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче