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

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
...@@ -228,18 +228,13 @@ int ipath_make_rc_req(struct ipath_qp *qp, ...@@ -228,18 +228,13 @@ int ipath_make_rc_req(struct ipath_qp *qp,
goto done; goto done;
if (!(ib_ipath_state_ops[qp->state] & IPATH_PROCESS_SEND_OK) || 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; goto bail;
/* Limit the number of packets sent without an ACK. */ /* Limit the number of packets sent without an ACK. */
if (ipath_cmp24(qp->s_psn, qp->s_last_psn + IPATH_PSN_CREDIT) > 0) { if (ipath_cmp24(qp->s_psn, qp->s_last_psn + IPATH_PSN_CREDIT) > 0) {
qp->s_wait_credit = 1; qp->s_wait_credit = 1;
dev->n_rc_stalls++; 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; goto bail;
} }
......
...@@ -422,7 +422,7 @@ struct ipath_qp { ...@@ -422,7 +422,7 @@ struct ipath_qp {
#define IPATH_S_RDMAR_PENDING 0x04 #define IPATH_S_RDMAR_PENDING 0x04
#define IPATH_S_ACK_PENDING 0x08 #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 * Since struct ipath_swqe is not a fixed size, we can't simply index into
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment