On Sat, Sep 16, 2023 at 11:31:45AM -0500, Scott Cheloha wrote:
> 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?
Sure.
> 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 - 1.86
> +++ sched_bsd.c 16 Sep 2023 16:24:33 -
> @@ -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(, 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();
> - timeout_add_sec(to, 1);
> + timeout_add_sec(, 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(_to, schedcpu, _to);
> - timeout_set(_to, update_loadavg, _to);
> -
> - schedcpu(_to);
> - update_loadavg(_to);
> + schedcpu(NULL);
> + update_loadavg(NULL);
>
> #ifndef SMALL_KERNEL
> if (perfpolicy == PERFPOL_AUTO)
--
:wq Claudio