aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/subr_pcpu.c
diff options
context:
space:
mode:
authorJeff Roberson <jeff@FreeBSD.org>2009-06-25 01:31:59 +0000
committerJeff Roberson <jeff@FreeBSD.org>2009-06-25 01:31:59 +0000
commite6e06a8b478095eb86a5ece0c4266cea6894c6e7 (patch)
tree40b77f188a337e88d175b7a0b53d7b13c9cbce6c /sys/kern/subr_pcpu.c
parent72263475c435bea198e4c3199be7f61a35f6fdc2 (diff)
downloadsrc-e6e06a8b478095eb86a5ece0c4266cea6894c6e7.tar.gz
src-e6e06a8b478095eb86a5ece0c4266cea6894c6e7.zip
Notes
Diffstat (limited to 'sys/kern/subr_pcpu.c')
-rw-r--r--sys/kern/subr_pcpu.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/sys/kern/subr_pcpu.c b/sys/kern/subr_pcpu.c
index 53437e5fd96e..c0372b0e12cc 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)));
}