The schedcpu() and loadavg() timeout structures are already hidden
from the global namespace. We can further simplify scheduler_start()
by moving the structures into the callback functions and statically
initializing them with TIMEOUT_INITIALIZER(9).
ok?
Index: sched_bsd.c
===================================================================
RCS file: /cvs/src/sys/kern/sched_bsd.c,v
retrieving revision 1.86
diff -u -p -r1.86 sched_bsd.c
--- sched_bsd.c 10 Sep 2023 03:08:05 -0000 1.86
+++ sched_bsd.c 16 Sep 2023 16:24:33 -0000
@@ -117,9 +117,9 @@ roundrobin(struct clockintr *cl, void *c
* 1, 5, and 15 minute intervals.
*/
void
-update_loadavg(void *arg)
+update_loadavg(void *unused)
{
- struct timeout *to = (struct timeout *)arg;
+ static struct timeout to = TIMEOUT_INITIALIZER(update_loadavg, NULL);
CPU_INFO_ITERATOR cii;
struct cpu_info *ci;
u_int i, nrun = 0;
@@ -135,7 +135,7 @@ update_loadavg(void *arg)
nrun * FSCALE * (FSCALE - cexp[i])) >> FSHIFT;
}
- timeout_add_sec(to, 5);
+ timeout_add_sec(&to, 5);
}
/*
@@ -227,9 +227,9 @@ fixpt_t ccpu = 0.95122942450071400909 *
* Recompute process priorities, every second.
*/
void
-schedcpu(void *arg)
+schedcpu(void *unused)
{
- struct timeout *to = (struct timeout *)arg;
+ static struct timeout to = TIMEOUT_INITIALIZER(schedcpu, NULL);
fixpt_t loadfac = loadfactor(averunnable.ldavg[0]);
struct proc *p;
int s;
@@ -280,7 +280,7 @@ schedcpu(void *arg)
SCHED_UNLOCK(s);
}
wakeup(&lbolt);
- timeout_add_sec(to, 1);
+ timeout_add_sec(&to, 1);
}
/*
@@ -726,23 +726,14 @@ sysctl_hwperfpolicy(void *oldp, size_t *
}
#endif
+/*
+ * Start the scheduler's periodic timeouts.
+ */
void
scheduler_start(void)
{
- static struct timeout schedcpu_to;
- static struct timeout loadavg_to;
-
- /*
- * We avoid polluting the global namespace by keeping the scheduler
- * timeouts static in this function.
- * We setup the timeout here and kick schedcpu once to make it do
- * its job.
- */
- timeout_set(&schedcpu_to, schedcpu, &schedcpu_to);
- timeout_set(&loadavg_to, update_loadavg, &loadavg_to);
-
- schedcpu(&schedcpu_to);
- update_loadavg(&loadavg_to);
+ schedcpu(NULL);
+ update_loadavg(NULL);
#ifndef SMALL_KERNEL
if (perfpolicy == PERFPOL_AUTO)