summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2016-12-15 22:39:52 +0000
committerjhb <jhb@FreeBSD.org>2016-12-15 22:39:52 +0000
commite79371679162519cb772a1b1042dbdbc2dfce3a7 (patch)
tree17895087bcfed61e1052e3cc15a37ddff027ec2e
parent9c05fd338ab9015170b9e9e6df619b951612b90d (diff)
downloadFreeBSD-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.c5
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++;
OpenPOWER on IntegriCloud