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

Commit 099a884b authored by Mike Marciniszyn's avatar Mike Marciniszyn Committed by Doug Ledford
Browse files

IB/hfi1: Handle wakeup of orphaned QPs for pio



Once a send context is taken down due to a link failure, any QPs waiting
for pio credits will stay on the waitlist indefinitely.

Fix by wakeing up all QPs linked to piowait list.

Fixes: 77241056 ("IB/hfi1: add driver files")
Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent f972775b
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -952,6 +952,22 @@ void sc_disable(struct send_context *sc)
		}
	}
	spin_unlock(&sc->release_lock);

	write_seqlock(&sc->waitlock);
	while (!list_empty(&sc->piowait)) {
		struct iowait *wait;
		struct rvt_qp *qp;
		struct hfi1_qp_priv *priv;

		wait = list_first_entry(&sc->piowait, struct iowait, list);
		qp = iowait_to_qp(wait);
		priv = qp->priv;
		list_del_init(&priv->s_iowait.list);
		priv->s_iowait.lock = NULL;
		hfi1_qp_wakeup(qp, RVT_S_WAIT_PIO | HFI1_S_WAIT_PIO_DRAIN);
	}
	write_sequnlock(&sc->waitlock);

	spin_unlock_irq(&sc->alloc_lock);
}