cam: Avoiding waking up doneq threads if we're dumping

Depending on the state of the target doneq thread at the time of the
panic, the wakeup can hang indefinitely in thread_lock_block_wait().
That function should likely be modified to return immediately if the
scheduler is stopped, but it is also preferable to avoid wakeups in
general after a panic.

Reported by:	pho
Reviewed by:	mav, imp
MFC after:	1 week
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D32126
This commit is contained in:
Mark Johnston 2021-09-25 10:13:56 -04:00
parent 24a3897c2c
commit ed8ef7ae8b

View File

@ -4627,7 +4627,7 @@ xpt_done(union ccb *done_ccb)
STAILQ_INSERT_TAIL(&queue->cam_doneq, &done_ccb->ccb_h, sim_links.stqe);
done_ccb->ccb_h.pinfo.index = CAM_DONEQ_INDEX;
mtx_unlock(&queue->cam_doneq_mtx);
if (run)
if (run && !dumping)
wakeup(&queue->cam_doneq);
}