We don't actually need these NULL-checks, my mistake. sched_init_cpu() is only ever run once for a given cpu_info.
ok? Index: kern_sched.c =================================================================== RCS file: /cvs/src/sys/kern/kern_sched.c,v retrieving revision 1.87 diff -u -p -r1.87 kern_sched.c --- kern_sched.c 29 Aug 2023 16:19:34 -0000 1.87 +++ kern_sched.c 31 Aug 2023 15:24:02 -0000 @@ -88,26 +88,15 @@ sched_init_cpu(struct cpu_info *ci) spc->spc_idleproc = NULL; - if (spc->spc_itimer == NULL) { - spc->spc_itimer = clockintr_establish(&ci->ci_queue, - itimer_update); - if (spc->spc_itimer == NULL) { - panic("%s: clockintr_establish itimer_update", - __func__); - } - } - if (spc->spc_profclock == NULL) { - spc->spc_profclock = clockintr_establish(&ci->ci_queue, - profclock); - if (spc->spc_profclock == NULL) - panic("%s: clockintr_establish profclock", __func__); - } - if (spc->spc_roundrobin == NULL) { - spc->spc_roundrobin = clockintr_establish(&ci->ci_queue, - roundrobin); - if (spc->spc_roundrobin == NULL) - panic("%s: clockintr_establish roundrobin", __func__); - } + spc->spc_itimer = clockintr_establish(&ci->ci_queue, itimer_update); + if (spc->spc_itimer == NULL) + panic("%s: clockintr_establish itimer_update", __func__); + spc->spc_profclock = clockintr_establish(&ci->ci_queue, profclock); + if (spc->spc_profclock == NULL) + panic("%s: clockintr_establish profclock", __func__); + spc->spc_roundrobin = clockintr_establish(&ci->ci_queue, roundrobin); + if (spc->spc_roundrobin == NULL) + panic("%s: clockintr_establish roundrobin", __func__); kthread_create_deferred(sched_kthreads_create, ci);