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: Ralph Campbell <ralph.campbell@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
Родитель
35ff032e65
Коммит
c3af664adb
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче