First v5.19 rc pull request
Three minor bug fixes: - qedr not setting the QP timeout properly toward userspace - Memory leak on error path in ib_cm - Divide by 0 in RDMA interrupt moderation -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQRRRCHOFoQz/8F5bUaFwuHvBreFYQUCYr2asAAKCRCFwuHvBreF YZRwAQCoGE+/UNxxZKZPwB/OP1oYGby2zMm8tMmgrvREFpGg4AD/UzWAWYpPBmXj Ue6xDo2wzS3nwGSZlDzWOI1kD9fGlQA= =9mO3 -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma Pull rdma fixes from Jason Gunthorpe: "Three minor bug fixes: - qedr not setting the QP timeout properly toward userspace - Memory leak on error path in ib_cm - Divide by 0 in RDMA interrupt moderation" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: linux/dim: Fix divide by 0 in RDMA DIM RDMA/cm: Fix memory leak in ib_cm_insert_listen RDMA/qedr: Fix reporting QP timeout attribute
This commit is contained in:
Коммит
1a0e93df1e
|
@ -1252,8 +1252,10 @@ struct ib_cm_id *ib_cm_insert_listen(struct ib_device *device,
|
||||||
return ERR_CAST(cm_id_priv);
|
return ERR_CAST(cm_id_priv);
|
||||||
|
|
||||||
err = cm_init_listen(cm_id_priv, service_id, 0);
|
err = cm_init_listen(cm_id_priv, service_id, 0);
|
||||||
if (err)
|
if (err) {
|
||||||
|
ib_destroy_cm_id(&cm_id_priv->id);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irq(&cm_id_priv->lock);
|
spin_lock_irq(&cm_id_priv->lock);
|
||||||
listen_id_priv = cm_insert_listen(cm_id_priv, cm_handler);
|
listen_id_priv = cm_insert_listen(cm_id_priv, cm_handler);
|
||||||
|
|
|
@ -418,6 +418,7 @@ struct qedr_qp {
|
||||||
u32 sq_psn;
|
u32 sq_psn;
|
||||||
u32 qkey;
|
u32 qkey;
|
||||||
u32 dest_qp_num;
|
u32 dest_qp_num;
|
||||||
|
u8 timeout;
|
||||||
|
|
||||||
/* Relevant to qps created from kernel space only (ULPs) */
|
/* Relevant to qps created from kernel space only (ULPs) */
|
||||||
u8 prev_wqe_size;
|
u8 prev_wqe_size;
|
||||||
|
|
|
@ -2613,6 +2613,8 @@ int qedr_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
|
||||||
1 << max_t(int, attr->timeout - 8, 0);
|
1 << max_t(int, attr->timeout - 8, 0);
|
||||||
else
|
else
|
||||||
qp_params.ack_timeout = 0;
|
qp_params.ack_timeout = 0;
|
||||||
|
|
||||||
|
qp->timeout = attr->timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attr_mask & IB_QP_RETRY_CNT) {
|
if (attr_mask & IB_QP_RETRY_CNT) {
|
||||||
|
@ -2772,7 +2774,7 @@ int qedr_query_qp(struct ib_qp *ibqp,
|
||||||
rdma_ah_set_dgid_raw(&qp_attr->ah_attr, ¶ms.dgid.bytes[0]);
|
rdma_ah_set_dgid_raw(&qp_attr->ah_attr, ¶ms.dgid.bytes[0]);
|
||||||
rdma_ah_set_port_num(&qp_attr->ah_attr, 1);
|
rdma_ah_set_port_num(&qp_attr->ah_attr, 1);
|
||||||
rdma_ah_set_sl(&qp_attr->ah_attr, 0);
|
rdma_ah_set_sl(&qp_attr->ah_attr, 0);
|
||||||
qp_attr->timeout = params.timeout;
|
qp_attr->timeout = qp->timeout;
|
||||||
qp_attr->rnr_retry = params.rnr_retry;
|
qp_attr->rnr_retry = params.rnr_retry;
|
||||||
qp_attr->retry_cnt = params.retry_cnt;
|
qp_attr->retry_cnt = params.retry_cnt;
|
||||||
qp_attr->min_rnr_timer = params.min_rnr_nak_timer;
|
qp_attr->min_rnr_timer = params.min_rnr_nak_timer;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
* We consider 10% difference as significant.
|
* We consider 10% difference as significant.
|
||||||
*/
|
*/
|
||||||
#define IS_SIGNIFICANT_DIFF(val, ref) \
|
#define IS_SIGNIFICANT_DIFF(val, ref) \
|
||||||
(((100UL * abs((val) - (ref))) / (ref)) > 10)
|
((ref) && (((100UL * abs((val) - (ref))) / (ref)) > 10))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Calculate the gap between two values.
|
* Calculate the gap between two values.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче