summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_pcpu.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2009-06-25 01:31:59 +0000
committerjeff <jeff@FreeBSD.org>2009-06-25 01:31:59 +0000
commita90de6966fb7a33bd8e6cb8f793cf8be779e97cd (patch)
tree40b77f188a337e88d175b7a0b53d7b13c9cbce6c /sys/kern/subr_pcpu.c
parent4876fd20a922acf5de5121f38e5a539ee6d38464 (diff)
downloadFreeBSD-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/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 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)));
}
OpenPOWER on IntegriCloud