diff options
Diffstat (limited to 'sys/kern/kern_switch.c')
-rw-r--r-- | sys/kern/kern_switch.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/kern/kern_switch.c b/sys/kern/kern_switch.c index 4ae03a9..9629ac2 100644 --- a/sys/kern/kern_switch.c +++ b/sys/kern/kern_switch.c @@ -124,6 +124,7 @@ choosethread(void) struct thread *td; struct ksegrp *kg; +retry: if ((ke = runq_choose(&runq))) { td = ke->ke_thread; KASSERT((td->td_kse == ke), ("kse/thread mismatch")); @@ -157,6 +158,9 @@ choosethread(void) td = PCPU_GET(idlethread); CTR1(KTR_RUNQ, "choosethread: td=%p (idle)", td); } + if (panicstr && ((td->td_proc->p_flag & P_SYSTEM) == 0 && + (td->td_flags & TDF_INPANIC) == 0)) + goto retry; td->td_state = TDS_RUNNING; return (td); } |