Date: Fri, 22 Mar 2013 21:11:18 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: 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 Message-ID: <201303222111.r2MLBIt5030483@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201303222111.r2MLBIt5030483>