Re: scheduler_start: move static timeout structs into callback functions

2023-09-17 Thread Claudio Jeker
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



scheduler_start: move static timeout structs into callback functions

2023-09-16 Thread Scott Cheloha
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 -  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)