On Thursday, July 28, 2016 12:31:31 AM Gary Jennejohn wrote: > Well, now I know that ULE is a prerequiste for EARLY_AP_STARTUP! I > wasn't aware of that. I prefer BSD and that's the scheduler I did > the first tests with. > > But with the ULE scheduler the system comes up all the way. > > It would be nice if the BSD scheduler could also be modified to > work with EARLY_AP_STARTUP. I wasn't able to reproduce your hang with 4BSD, but I think I see a possible problem. Try this: diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index 7de56b6..d53331a 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c _at__at_ -327,7 +327,6 _at__at_ 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, _at__at_ -348,7 +347,7 _at__at_ 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 _at__at_ -1127,7 +1126,7 _at__at_ 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++; -- John BaldwinReceived on Fri Jul 29 2016 - 18:17:49 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:07 UTC