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
