Commit 1a0e93df authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents 9fb3bb25 0fe3dbbe
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1252,8 +1252,10 @@ struct ib_cm_id *ib_cm_insert_listen(struct ib_device *device,
		return ERR_CAST(cm_id_priv);

	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);
	}

	spin_lock_irq(&cm_id_priv->lock);
	listen_id_priv = cm_insert_listen(cm_id_priv, cm_handler);
+1 −0
Original line number Diff line number Diff line
@@ -418,6 +418,7 @@ struct qedr_qp {
	u32 sq_psn;
	u32 qkey;
	u32 dest_qp_num;
	u8 timeout;

	/* Relevant to qps created from kernel space only (ULPs) */
	u8 prev_wqe_size;
+3 −1
Original line number Diff line number Diff line
@@ -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);
		else
			qp_params.ack_timeout = 0;

		qp->timeout = attr->timeout;
	}

	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, &params.dgid.bytes[0]);
	rdma_ah_set_port_num(&qp_attr->ah_attr, 1);
	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->retry_cnt = params.retry_cnt;
	qp_attr->min_rnr_timer = params.min_rnr_nak_timer;
+1 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@
 * We consider 10% difference as significant.
 */
#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.