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)

Reply via email to