diff options
author | Alexander Motin <mav@FreeBSD.org> | 2010-09-14 04:48:04 +0000 |
---|---|---|
committer | Alexander Motin <mav@FreeBSD.org> | 2010-09-14 04:48:04 +0000 |
commit | dd9595e7fa6cb5054f14ebc5fdd2f0a77939b58e (patch) | |
tree | edb5b2725e3f3f8184bd9ba132647c1b2b5c8484 /sys/kern/kern_clocksource.c | |
parent | 44633af3c7548fd746bb976a6baa77c116c156c1 (diff) | |
download | src-dd9595e7fa6cb5054f14ebc5fdd2f0a77939b58e.tar.gz src-dd9595e7fa6cb5054f14ebc5fdd2f0a77939b58e.zip |
Add some foot shooting protection by checking singlemul value correctness.
Rephrase sysctls descriptions.
Suggested by: edmaste
Notes
Notes:
svn path=/head/; revision=212600
Diffstat (limited to 'sys/kern/kern_clocksource.c')
-rw-r--r-- | sys/kern/kern_clocksource.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/kern/kern_clocksource.c b/sys/kern/kern_clocksource.c index 29304a496cb8..7654acee4e2e 100644 --- a/sys/kern/kern_clocksource.c +++ b/sys/kern/kern_clocksource.c @@ -105,7 +105,7 @@ static int profiling = 0; /* Profiling events enabled. */ static char timername[32]; /* Wanted timer. */ TUNABLE_STR("kern.eventtimer.timer", timername, sizeof(timername)); -static u_int singlemul = 0; /* Multiplier for periodic mode. */ +static int singlemul = 0; /* Multiplier for periodic mode. */ TUNABLE_INT("kern.eventtimer.singlemul", &singlemul); SYSCTL_INT(_kern_eventtimer, OID_AUTO, singlemul, CTLFLAG_RW, &singlemul, 0, "Multiplier for periodic mode"); @@ -425,6 +425,7 @@ setuptimer(void) periodic = 0; else if (!periodic && (timer->et_flags & ET_FLAGS_ONESHOT) == 0) periodic = 1; + singlemul = MIN(MAX(singlemul, 1), 20); freq = hz * singlemul; while (freq < (profiling ? profhz : stathz)) freq += hz; @@ -614,7 +615,7 @@ cpu_initclocks_bsp(void) * We want to run stathz in the neighborhood of 128hz. * We would like profhz to run as often as possible. */ - if (singlemul == 0) { + if (singlemul <= 0 || singlemul > 20) { if (hz >= 1500 || (hz % 128) == 0) singlemul = 1; else if (hz >= 750) @@ -844,7 +845,7 @@ sysctl_kern_eventtimer_timer(SYSCTL_HANDLER_ARGS) } SYSCTL_PROC(_kern_eventtimer, OID_AUTO, timer, CTLTYPE_STRING | CTLFLAG_RW | CTLFLAG_MPSAFE, - 0, 0, sysctl_kern_eventtimer_timer, "A", "Kernel event timer"); + 0, 0, sysctl_kern_eventtimer_timer, "A", "Chosen event timer"); /* * Report or change the active event timer periodicity. @@ -867,6 +868,6 @@ sysctl_kern_eventtimer_periodic(SYSCTL_HANDLER_ARGS) } SYSCTL_PROC(_kern_eventtimer, OID_AUTO, periodic, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - 0, 0, sysctl_kern_eventtimer_periodic, "I", "Kernel event timer periodic"); + 0, 0, sysctl_kern_eventtimer_periodic, "I", "Enable event timer periodic mode"); #endif |