Date: Wed, 3 Apr 2013 10:37:26 +0000 (UTC) From: Gleb Smirnoff <glebius@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r249044 - in projects/counters/sys: amd64/include arm/include i386/include ia64/include mips/include netinet powerpc/include sparc64/include Message-ID: <201304031037.r33AbQKh090067@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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__ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304031037.r33AbQKh090067>