svn commit: r249044 - in projects/counters/sys: amd64/include arm/include i386/include ia64/include mips/include netinet powerpc/include sparc64/include

Gleb Smirnoff glebius at FreeBSD.org
Wed Apr 3 10:37:28 UTC 2013


Author: glebius
Date: Wed Apr  3 10:37:26 2013
New Revision: 249044
URL: http://svnweb.freebsd.org/changeset/base/249044

Log:
  o Add counter_enter(), counter_exit(), counter_u64_add_protected().
  o Remove counter_u64_subtract() and change argument type to int64_t.
  
  Discussed with:	luigi, kib

Modified:
  projects/counters/sys/amd64/include/counter.h
  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/netinet/ip_input.c
  projects/counters/sys/netinet/ip_var.h
  projects/counters/sys/powerpc/include/counter.h
  projects/counters/sys/sparc64/include/counter.h

Modified: projects/counters/sys/amd64/include/counter.h
==============================================================================
--- projects/counters/sys/amd64/include/counter.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/amd64/include/counter.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -33,23 +33,18 @@
 
 extern struct pcpu __pcpu[1];
 
-static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
-{
+#define	counter_enter()	do {} while (0)
+#define	counter_exit()	do {} while (0)
 
-	__asm __volatile("addq\t%1,%%gs:(%0)"
-	    :
-	    : "r" ((char *)c - (char *)&__pcpu[0]), "r" (inc)
-	    : "memory", "cc");
-}
+#define	counter_u64_add_protected(c, i)	counter_u64_add(c, i)
 
 static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 
-	__asm __volatile("subq\t%1,%%gs:(%0)"
+	__asm __volatile("addq\t%1,%%gs:(%0)"
 	    :
-	    : "r" ((char *)c - (char *)&__pcpu[0]), "r" (dec)
+	    : "r" ((char *)c - (char *)&__pcpu[0]), "r" (inc)
 	    : "memory", "cc");
 }
 

Modified: projects/counters/sys/arm/include/counter.h
==============================================================================
--- projects/counters/sys/arm/include/counter.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/arm/include/counter.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -31,22 +31,21 @@
 
 #include <sys/pcpu.h>
 
-static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
-{
+#define	counter_enter()	critical_enter()
+#define	counter_exit()	critical_exit()
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) += inc;
-	critical_exit();
-}
+#define	counter_u64_add_protected(c, inc)	do {	\
+	CRITICAL_ASSERT(td);				\
+	*(uint64_t *)zpcpu_get(c) += (inc);		\
+} while (0)
 
 static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) -= dec;
-	critical_exit();
+	counter_enter();
+	counter_u64_add_protected(c, inc);
+	counter_exit();
 }
 
 #endif	/* ! __MACHINE_COUNTER_H__ */

Modified: projects/counters/sys/i386/include/counter.h
==============================================================================
--- projects/counters/sys/i386/include/counter.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/i386/include/counter.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -33,8 +33,18 @@
 #include <machine/md_var.h>
 #include <machine/specialreg.h>
 
+#define	counter_enter()	do {				\
+	if ((cpu_feature & CPUID_CX8) == 0)		\
+		critical_enter();			\
+} while (0)
+
+#define	counter_exit()	do {				\
+	if ((cpu_feature & CPUID_CX8) == 0)		\
+		critical_exit();			\
+} while (0)
+
 static inline void
-counter_64_inc_8b(uint64_t *p, uint64_t inc)
+counter_64_inc_8b(uint64_t *p, int64_t inc)
 {
 
 	__asm __volatile(
@@ -52,8 +62,16 @@ counter_64_inc_8b(uint64_t *p, uint64_t 
 	: "memory", "cc", "eax", "edx", "ebx", "ecx");
 }
 
+#define	counter_u64_add_protected(c, inc)	do {	\
+	if ((cpu_feature & CPUID_CX8) == 0) {		\
+		CRITICAL_ASSERT(td);			\
+		*(uint64_t *)zpcpu_get(c) += (inc);	\
+	} else						\
+		counter_64_inc_8b((c), (inc));		\
+} while (0)
+
 static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 
 	if ((cpu_feature & CPUID_CX8) == 0) {
@@ -65,11 +83,4 @@ counter_u64_add(counter_u64_t c, uint64_
 	}
 }
 
-static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
-{
-
-	counter_u64_add(c, -(int64_t)dec);
-}
-
 #endif	/* ! __MACHINE_COUNTER_H__ */

Modified: projects/counters/sys/ia64/include/counter.h
==============================================================================
--- projects/counters/sys/ia64/include/counter.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/ia64/include/counter.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -31,22 +31,21 @@
 
 #include <sys/pcpu.h>
 
-static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
-{
+#define	counter_enter()	critical_enter()
+#define	counter_exit()	critical_exit()
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) += inc;
-	critical_exit();
-}
+#define	counter_u64_add_protected(c, inc)	do {	\
+	CRITICAL_ASSERT(td);				\
+	*(uint64_t *)zpcpu_get(c) += (inc);		\
+} while (0)
 
 static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) -= dec;
-	critical_exit();
+	counter_enter();
+	counter_u64_add_protected(c, inc);
+	counter_exit();
 }
 
 #endif	/* ! __MACHINE_COUNTER_H__ */

Modified: projects/counters/sys/mips/include/counter.h
==============================================================================
--- projects/counters/sys/mips/include/counter.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/mips/include/counter.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -31,22 +31,21 @@
 
 #include <sys/pcpu.h>
 
-static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
-{
+#define	counter_enter()	critical_enter()
+#define	counter_exit()	critical_exit()
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) += inc;
-	critical_exit();
-}
+#define	counter_u64_add_protected(c, inc)	do {	\
+	CRITICAL_ASSERT(td);				\
+	*(uint64_t *)zpcpu_get(c) += (inc);		\
+} while (0)
 
 static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) -= dec;
-	critical_exit();
+	counter_enter();
+	counter_u64_add_protected(c, inc);
+	counter_exit();
 }
 
 #endif	/* ! __MACHINE_COUNTER_H__ */

Modified: projects/counters/sys/netinet/ip_input.c
==============================================================================
--- projects/counters/sys/netinet/ip_input.c	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/netinet/ip_input.c	Wed Apr  3 10:37:26 2013	(r249044)
@@ -293,7 +293,7 @@ void
 kmod_ipstat_dec(int statnum)
 {
 
-	counter_u64_subtract((counter_u64_t )&V_ipstatp + statnum, 1);
+	counter_u64_add((counter_u64_t )&V_ipstatp + statnum, -1);
 }
 
 static int

Modified: projects/counters/sys/netinet/ip_var.h
==============================================================================
--- projects/counters/sys/netinet/ip_var.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/netinet/ip_var.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -175,7 +175,7 @@ VNET_DECLARE(struct ipstat_p, ipstatp);
 #define	IPSTAT_ADD(name, val)	counter_u64_add(V_ipstatp.name, (val))
 #define	IPSTAT_SUB(name, val)	counter_u64_subtract(V_ipstatp.name, (val))
 #define	IPSTAT_INC(name)	IPSTAT_ADD(name, 1)
-#define	IPSTAT_DEC(name)	IPSTAT_SUB(name, 1)
+#define	IPSTAT_DEC(name)	IPSTAT_ADD(name, -1)
 
 /*
  * Kernel module consumers must use this accessor macro.

Modified: projects/counters/sys/powerpc/include/counter.h
==============================================================================
--- projects/counters/sys/powerpc/include/counter.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/powerpc/include/counter.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -33,8 +33,13 @@
 
 #if defined(AIM) && defined(__powerpc64__)
 
+#define	counter_enter()	do {} while (0)
+#define	counter_exit()	do {} while (0)
+
+#define	counter_u64_add_protected(c, i)	counter_u64_add(c, i)
+
 static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 	uint64_t ccpu, old;
 
@@ -50,31 +55,23 @@ counter_u64_add(counter_u64_t c, uint64_
 	    : "cc", "memory");
 }
 
-static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
-{
-
-	counter_u64_add(c, -dec);
-}
-
 #else	/* !AIM || !64bit */
 
-static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
-{
+#define	counter_enter()	critical_enter()
+#define	counter_exit()	critical_exit()
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) += inc;
-	critical_exit();
-}
+#define	counter_u64_add_protected(c, inc)	do {	\
+	CRITICAL_ASSERT(td);				\
+	*(uint64_t *)zpcpu_get(c) += (inc);		\
+} while (0)
 
 static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) -= dec;
-	critical_exit();
+	counter_enter();
+	counter_u64_add_protected(c, inc);
+	counter_exit();
 }
 
 #endif	/* AIM 64bit */

Modified: projects/counters/sys/sparc64/include/counter.h
==============================================================================
--- projects/counters/sys/sparc64/include/counter.h	Wed Apr  3 10:31:13 2013	(r249043)
+++ projects/counters/sys/sparc64/include/counter.h	Wed Apr  3 10:37:26 2013	(r249044)
@@ -31,22 +31,21 @@
 
 #include <sys/pcpu.h>
 
-static inline void
-counter_u64_add(counter_u64_t c, uint64_t inc)
-{
+#define	counter_enter()	critical_enter()
+#define	counter_exit()	critical_exit()
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) += inc;
-	critical_exit();
-}
+#define	counter_u64_add_protected(c, inc)	do {	\
+	CRITICAL_ASSERT(td);				\
+	*(uint64_t *)zpcpu_get(c) += (inc);		\
+} while (0)
 
 static inline void
-counter_u64_subtract(counter_u64_t c, uint64_t dec)
+counter_u64_add(counter_u64_t c, int64_t inc)
 {
 
-	critical_enter();
-	*(uint64_t *)zpcpu_get(c) -= dec;
-	critical_exit();
+	counter_enter();
+	counter_u64_add_protected(c, inc);
+	counter_exit();
 }
 
 #endif	/* ! __MACHINE_COUNTER_H__ */


More information about the svn-src-projects mailing list