IB/hfi1: Correct error calldown locking
The resource specific wait locking missed correcting the lock
for the notify_error_qp() calldown.
The code is fixed to correctly use the iowait lock field to protect
the head that is protected by that lock.
Fixes: Commit 4e045572e2
("IB/hfi1: Add unique txwait_lock for txreq events")
Reviewed-by: Sebastian Sanchez <sebastian.sanchez@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
39e2afa8d0
commit
a8715b97d6
@ -961,17 +961,20 @@ int get_pmtu_from_attr(struct rvt_dev_info *rdi, struct rvt_qp *qp,
|
||||
|
||||
void notify_error_qp(struct rvt_qp *qp)
|
||||
{
|
||||
struct hfi1_ibdev *dev = to_idev(qp->ibqp.device);
|
||||
struct hfi1_qp_priv *priv = qp->priv;
|
||||
seqlock_t *lock = priv->s_iowait.lock;
|
||||
|
||||
write_seqlock(&dev->iowait_lock);
|
||||
if (!list_empty(&priv->s_iowait.list) && !(qp->s_flags & RVT_S_BUSY)) {
|
||||
qp->s_flags &= ~RVT_S_ANY_WAIT_IO;
|
||||
list_del_init(&priv->s_iowait.list);
|
||||
priv->s_iowait.lock = NULL;
|
||||
rvt_put_qp(qp);
|
||||
if (lock) {
|
||||
write_seqlock(lock);
|
||||
if (!list_empty(&priv->s_iowait.list) &&
|
||||
!(qp->s_flags & RVT_S_BUSY)) {
|
||||
qp->s_flags &= ~RVT_S_ANY_WAIT_IO;
|
||||
list_del_init(&priv->s_iowait.list);
|
||||
priv->s_iowait.lock = NULL;
|
||||
rvt_put_qp(qp);
|
||||
}
|
||||
write_sequnlock(lock);
|
||||
}
|
||||
write_sequnlock(&dev->iowait_lock);
|
||||
|
||||
if (!(qp->s_flags & RVT_S_BUSY)) {
|
||||
qp->s_hdrwords = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user