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