Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c3af664a authored by Ralph Campbell's avatar Ralph Campbell Committed by Roland Dreier
Browse files

IB/ipath: Don't put QP in timeout queue if waiting to send



This fixes a problem which causes too many RC timeouts and
retransmits.

Signed-off-by: default avatarRalph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 35ff032e
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -228,18 +228,13 @@ int ipath_make_rc_req(struct ipath_qp *qp,
		goto done;

	if (!(ib_ipath_state_ops[qp->state] & IPATH_PROCESS_SEND_OK) ||
	    qp->s_rnr_timeout)
	    qp->s_rnr_timeout || qp->s_wait_credit)
		goto bail;

	/* Limit the number of packets sent without an ACK. */
	if (ipath_cmp24(qp->s_psn, qp->s_last_psn + IPATH_PSN_CREDIT) > 0) {
		qp->s_wait_credit = 1;
		dev->n_rc_stalls++;
		spin_lock(&dev->pending_lock);
		if (list_empty(&qp->timerwait))
			list_add_tail(&qp->timerwait,
				      &dev->pending[dev->pending_index]);
		spin_unlock(&dev->pending_lock);
		goto bail;
	}

+1 −1
Original line number Diff line number Diff line
@@ -422,7 +422,7 @@ struct ipath_qp {
#define IPATH_S_RDMAR_PENDING	0x04
#define IPATH_S_ACK_PENDING	0x08

#define IPATH_PSN_CREDIT	2048
#define IPATH_PSN_CREDIT	512

/*
 * Since struct ipath_swqe is not a fixed size, we can't simply index into