Skip site navigation (1)Skip section navigation (2)
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>