From owner-svn-src-projects@FreeBSD.ORG Fri Mar 22 21:11:21 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id B8A6B144; Fri, 22 Mar 2013 21:11:21 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 9A8FE9A0; Fri, 22 Mar 2013 21:11:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r2MLBJaW030491; Fri, 22 Mar 2013 21:11:19 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r2MLBIt5030483; Fri, 22 Mar 2013 21:11:18 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201303222111.r2MLBIt5030483@svn.freebsd.org> From: Gleb Smirnoff Date: Fri, 22 Mar 2013 21:11:18 +0000 (UTC) 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 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Mar 2013 21:11:21 -0000 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