From a90de6966fb7a33bd8e6cb8f793cf8be779e97cd Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 25 Jun 2009 01:31:59 +0000 Subject: - Add a sysctl_dpcpu_long to support long typed pcpu stats. - Remove the #ifndef SMP case as the SMP code works on UP as well. Reviewed by: sam --- sys/kern/subr_pcpu.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'sys/kern/subr_pcpu.c') diff --git a/sys/kern/subr_pcpu.c b/sys/kern/subr_pcpu.c index 53437e5..c0372b0 100644 --- a/sys/kern/subr_pcpu.c +++ b/sys/kern/subr_pcpu.c @@ -264,9 +264,8 @@ pcpu_find(u_int cpuid) int sysctl_dpcpu_quad(SYSCTL_HANDLER_ARGS) { - int64_t count; -#ifdef SMP uintptr_t dpcpu; + int64_t count; int i; count = 0; @@ -276,18 +275,31 @@ sysctl_dpcpu_quad(SYSCTL_HANDLER_ARGS) continue; count += *(int64_t *)(dpcpu + (uintptr_t)arg1); } -#else - count = *(int64_t *)(dpcpu_off[0] + (uintptr_t)arg1); -#endif + return (SYSCTL_OUT(req, &count, sizeof(count))); +} + +int +sysctl_dpcpu_long(SYSCTL_HANDLER_ARGS) +{ + uintptr_t dpcpu; + long count; + int i; + + count = 0; + for (i = 0; i < mp_ncpus; ++i) { + dpcpu = dpcpu_off[i]; + if (dpcpu == 0) + continue; + count += *(long *)(dpcpu + (uintptr_t)arg1); + } return (SYSCTL_OUT(req, &count, sizeof(count))); } int sysctl_dpcpu_int(SYSCTL_HANDLER_ARGS) { - int count; -#ifdef SMP uintptr_t dpcpu; + int count; int i; count = 0; @@ -297,9 +309,6 @@ sysctl_dpcpu_int(SYSCTL_HANDLER_ARGS) continue; count += *(int *)(dpcpu + (uintptr_t)arg1); } -#else - count = *(int *)(dpcpu_off[0] + (uintptr_t)arg1); -#endif return (SYSCTL_OUT(req, &count, sizeof(count))); } -- cgit v1.1