svn commit: r248622 - in projects/counters: share/man/man9 sys/arm/include sys/i386/include sys/ia64/include sys/mips/include sys/powerpc/include sys/sparc64/include sys/sys
Gleb Smirnoff
glebius at FreeBSD.org
Fri Mar 22 21:11:21 UTC 2013
Author: glebius
Date: Fri Mar 22 21:11:17 2013
New Revision: 248622
URL: http://svnweb.freebsd.org/changeset/base/248622
Log:
Provide zpcpu_get() inline to access curcpu member of an allocation
taken from UMA_ZONE_PCPU zone.
Reviewed by: kib
Modified:
projects/counters/share/man/man9/zone.9
projects/counters/sys/arm/include/counter.h
projects/counters/sys/i386/include/counter.h
projects/counters/sys/ia64/include/counter.h
projects/counters/sys/mips/include/counter.h
projects/counters/sys/powerpc/include/counter.h
projects/counters/sys/sparc64/include/counter.h
projects/counters/sys/sys/pcpu.h
Modified: projects/counters/share/man/man9/zone.9
==============================================================================
--- projects/counters/share/man/man9/zone.9 Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/share/man/man9/zone.9 Fri Mar 22 21:11:17 2013 (r248622)
@@ -161,8 +161,12 @@ A CPU can address its private copy using
multiple of current CPU id and
.Fn sizeof "struct pcpu" :
.Bd -literal -offset indent
+foo_zone = uma_zcreate(..., UMA_ZONE_PCPU);
+ ...
+foo_base = uma_zalloc(foo_zone, ...);
+ ...
critical_enter();
-foo_pcpu = (foo *)((char *)foo_base + sizeof(struct pcpu) * curcpu);
+foo_pcpu = (foo_t *)zpcpu_get(foo_base);
/* do something with foo_pcpu */
critical_exit();
.Ed
Modified: projects/counters/sys/arm/include/counter.h
==============================================================================
--- projects/counters/sys/arm/include/counter.h Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/sys/arm/include/counter.h Fri Mar 22 21:11:17 2013 (r248622)
@@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc;
+ *(uint64_t *)zpcpu_get(c) += inc;
critical_exit();
}
@@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec;
+ *(uint64_t *)zpcpu_get(c) -= dec;
critical_exit();
}
Modified: projects/counters/sys/i386/include/counter.h
==============================================================================
--- projects/counters/sys/i386/include/counter.h Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/sys/i386/include/counter.h Fri Mar 22 21:11:17 2013 (r248622)
@@ -58,7 +58,7 @@ counter_u64_inc(counter_u64_t c, uint64_
if ((cpu_feature & CPUID_CX8) == 0) {
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc;
+ *(uint64_t *)zpcpu_get(c) += inc;
critical_exit();
} else {
counter_64_inc_8b(c, inc);
Modified: projects/counters/sys/ia64/include/counter.h
==============================================================================
--- projects/counters/sys/ia64/include/counter.h Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/sys/ia64/include/counter.h Fri Mar 22 21:11:17 2013 (r248622)
@@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc;
+ *(uint64_t *)zpcpu_get(c) += inc;
critical_exit();
}
@@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec;
+ *(uint64_t *)zpcpu_get(c) -= dec;
critical_exit();
}
Modified: projects/counters/sys/mips/include/counter.h
==============================================================================
--- projects/counters/sys/mips/include/counter.h Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/sys/mips/include/counter.h Fri Mar 22 21:11:17 2013 (r248622)
@@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc;
+ *(uint64_t *)zpcpu_get(c) += inc;
critical_exit();
}
@@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec;
+ *(uint64_t *)zpcpu_get(c) -= dec;
critical_exit();
}
Modified: projects/counters/sys/powerpc/include/counter.h
==============================================================================
--- projects/counters/sys/powerpc/include/counter.h Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/sys/powerpc/include/counter.h Fri Mar 22 21:11:17 2013 (r248622)
@@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc;
+ *(uint64_t *)zpcpu_get(c) += inc;
critical_exit();
}
@@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec;
+ *(uint64_t *)zpcpu_get(c) -= dec;
critical_exit();
}
Modified: projects/counters/sys/sparc64/include/counter.h
==============================================================================
--- projects/counters/sys/sparc64/include/counter.h Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/sys/sparc64/include/counter.h Fri Mar 22 21:11:17 2013 (r248622)
@@ -36,7 +36,7 @@ counter_u64_inc(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) += inc;
+ *(uint64_t *)zpcpu_get(c) += inc;
critical_exit();
}
@@ -45,7 +45,7 @@ counter_u64_dec(counter_u64_t c, uint64_
{
critical_enter();
- *(uint64_t *)((char *)c + sizeof(struct pcpu) * curcpu) -= dec;
+ *(uint64_t *)zpcpu_get(c) -= dec;
critical_exit();
}
Modified: projects/counters/sys/sys/pcpu.h
==============================================================================
--- projects/counters/sys/sys/pcpu.h Fri Mar 22 20:44:16 2013 (r248621)
+++ projects/counters/sys/sys/pcpu.h Fri Mar 22 21:11:17 2013 (r248622)
@@ -202,6 +202,14 @@ extern struct pcpu *cpuid_to_pcpu[];
#endif
#define curvidata PCPU_GET(vidata)
+/* Accessor to elements allocated via UMA_ZONE_PCPU zone. */
+static inline void *
+zpcpu_get(void *base)
+{
+
+ return ((char *)(base) + sizeof(struct pcpu) * curcpu);
+}
+
/*
* Machine dependent callouts. cpu_pcpu_init() is responsible for
* initializing machine dependent fields of struct pcpu, and
More information about the svn-src-projects
mailing list