diff options
author | jeff <jeff@FreeBSD.org> | 2009-06-25 01:31:59 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2009-06-25 01:31:59 +0000 |
commit | a90de6966fb7a33bd8e6cb8f793cf8be779e97cd (patch) | |
tree | 40b77f188a337e88d175b7a0b53d7b13c9cbce6c /sys | |
parent | 4876fd20a922acf5de5121f38e5a539ee6d38464 (diff) | |
download | FreeBSD-src-a90de6966fb7a33bd8e6cb8f793cf8be779e97cd.zip FreeBSD-src-a90de6966fb7a33bd8e6cb8f793cf8be779e97cd.tar.gz |
- 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
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/subr_pcpu.c | 29 | ||||
-rw-r--r-- | sys/sys/sysctl.h | 1 |
2 files changed, 20 insertions, 10 deletions
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))); } diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 912d7b23..ca7fafe 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -179,6 +179,7 @@ int sysctl_handle_string(SYSCTL_HANDLER_ARGS); int sysctl_handle_opaque(SYSCTL_HANDLER_ARGS); int sysctl_dpcpu_int(SYSCTL_HANDLER_ARGS); +int sysctl_dpcpu_long(SYSCTL_HANDLER_ARGS); int sysctl_dpcpu_quad(SYSCTL_HANDLER_ARGS); #ifdef VIMAGE |