diff options
author | jhb <jhb@FreeBSD.org> | 2016-12-15 22:39:52 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2016-12-15 22:39:52 +0000 |
commit | e79371679162519cb772a1b1042dbdbc2dfce3a7 (patch) | |
tree | 17895087bcfed61e1052e3cc15a37ddff027ec2e | |
parent | 9c05fd338ab9015170b9e9e6df619b951612b90d (diff) | |
download | FreeBSD-src-e79371679162519cb772a1b1042dbdbc2dfce3a7.zip FreeBSD-src-e79371679162519cb772a1b1042dbdbc2dfce3a7.tar.gz |
MFC 308565: Allow scheduling during early boot.
- Send IPI wakeups once SMP is started even if cold is true.
- Permit preemptions when cold is true.
These changes are needed for EARLY_AP_STARTUP.
-rw-r--r-- | sys/kern/sched_4bsd.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index 4d5257d..de939ce 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c @@ -326,7 +326,6 @@ maybe_preempt(struct thread *td) * - The current thread has a higher (numerically lower) or * equivalent priority. Note that this prevents curthread from * trying to preempt to itself. - * - It is too early in the boot for context switches (cold is set). * - The current thread has an inhibitor set or is in the process of * exiting. In this case, the current thread is about to switch * out anyways, so there's no point in preempting. If we did, @@ -347,7 +346,7 @@ maybe_preempt(struct thread *td) ("maybe_preempt: trying to run inhibited thread")); pri = td->td_priority; cpri = ctd->td_priority; - if (panicstr != NULL || pri >= cpri || cold /* || dumping */ || + if (panicstr != NULL || pri >= cpri /* || dumping */ || TD_IS_INHIBITED(ctd)) return (0); #ifndef FULL_PREEMPTION @@ -1105,7 +1104,7 @@ forward_wakeup(int cpunum) if ((!forward_wakeup_enabled) || (forward_wakeup_use_mask == 0 && forward_wakeup_use_loop == 0)) return (0); - if (!smp_started || cold || panicstr) + if (!smp_started || panicstr) return (0); forward_wakeups_requested++; |