Ted, do you recall why silent clipping was preferable to reporting a
range error? I prefer an error for the out of range values of hw.setperf
and so does most of the kernel sysctls.

Before:
% doas sysctl -w hw.setperf=-1; echo $?; sysctl hw.setperf
hw.setperf: 0 -> -1
0
hw.setperf=0

After:
% doas sysctl -w hw.setperf=-1; echo $?; sysctl hw.setperf
sysctl: hw.setperf: Invalid argument
0
hw.setperf=0

What do you think?

Thanks
Greg

>From 6bc5a0773d40a83efb192acaadd352d768ec8fbd Mon Sep 17 00:00:00 2001
From: Greg Steuck <[email protected]>
Date: Thu, 19 Nov 2020 21:04:57 -0800
Subject: [PATCH] Use sysctl_int_bounded for sysctl_hwsetperf

Removed some trailing whitespace while there and minor style.
---
 sys/kern/sched_bsd.c | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git sys/kern/sched_bsd.c sys/kern/sched_bsd.c
index 1a5185b72f4..f2332e394fa 100644
--- sys/kern/sched_bsd.c
+++ sys/kern/sched_bsd.c
@@ -147,7 +147,7 @@ roundrobin(struct cpu_info *ci)
  * We now need to prove two things:
  *     1) Given factor ** (5 * loadavg) ~= .1, prove factor == b/(b+1)
  *     2) Given b/(b+1) ** power ~= .1, prove power == (5 * loadavg)
- *     
+ *
  * Facts:
  *         For x close to zero, exp(x) =~ 1 + x, since
  *              exp(x) = 0! + x**1/1! + x**2/2! + ... .
@@ -602,33 +602,27 @@ setperf_auto(void *v)
                perflevel = 0;
                cpu_setperf(perflevel);
        }
-       
+
        timeout_add_msec(&setperf_to, 100);
 }
 
 int
 sysctl_hwsetperf(void *oldp, size_t *oldlenp, void *newp, size_t newlen)
 {
-       int err, newperf;
+       int err;
 
        if (!cpu_setperf)
                return EOPNOTSUPP;
 
        if (perfpolicy != PERFPOL_MANUAL)
                return sysctl_rdint(oldp, oldlenp, newp, perflevel);
-       
-       newperf = perflevel;
-       err = sysctl_int(oldp, oldlenp, newp, newlen, &newperf);
+
+       err = sysctl_int_bounded(oldp, oldlenp, newp, newlen,
+           &perflevel, 0, 100);
        if (err)
-               return err;
-       if (newperf > 100)
-               newperf = 100;
-       if (newperf < 0)
-               newperf = 0;
-       perflevel = newperf;
+               return (err);
        cpu_setperf(perflevel);
-
-       return 0;
+       return (0);
 }
 
 int
-- 
2.29.2

Reply via email to