* LWKT previously disallowed the scheduling of a thread flagged
TDF_TSLEEPQ because the tsleep queue was the same as the threadq.
Now that they are different, it is possible for the thread to
still be on a tsleepq when descheduled and later rescheduled.
Remove the check, allowing the thread to be rescheduled by LWKT.
This fixes issues with processes just locking up in "D"isk wait.
void
_lwkt_enqueue(thread_t td)
{
- if ((td->td_flags & (TDF_RUNQ|TDF_MIGRATING|TDF_TSLEEPQ|TDF_BLOCKQ)) == 0) {
+ if ((td->td_flags & (TDF_RUNQ|TDF_MIGRATING|TDF_BLOCKQ)) == 0) {
int nq = td->td_pri & TDPRI_MASK;
struct globaldata *gd = td->td_gd;