64-bit network statistics - architecture specific code I.
RFC PATCH 3/5 64-bit network statistics - architecture specific code I.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
64-bit network statistics:
Part 3 of 5 - architecture specific code I.
- --
Trust me, you don't want me doing _anything_ first thing in the morning.
- Linus Torvalds
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)
iD8DBQE/BOcxwFP0+seVj/4RApLpAKC4O/Mf0XaX33R6Vj1uMX7cf99tTwCeOFWV Y6BE1PGiw83GOEfbvECeR68=
=wFlU
-----END PGP SIGNATURE-----
include/asm-alpha/atomic.h +33 -0
@@ -9,6 +9,10 @@* than regular operations. */ +/* +* Authors: ?: ? +* Josef "Jeff" Sipek: <[email protected]> +*/ /* * Counter is volatile to make sure gcc doesn't try to be clever
@@ -111,4 +115,33 @@#define smp_mb__before_atomic_inc () smp_mb()#define smp_mb__after_atomic_inc () smp_mb() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_add64() +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_set64() +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_get64() +return tmp; +} +#endif /* _ALPHA_ATOMIC_H */
include/asm-arm/atomic.h +28 -0
@@ -12,6 +12,7 @@* 13-04-1997 RMK Made functions atomic! * 07-12-1997 RMK Upgraded for v2.1. * 26-08-1998 PJB Added #ifdef __KERNEL__ +* 02-07-2003 JS Added locked_* */ #ifndef __ASM_ARM_ATOMIC_H#define __ASM_ARM_ATOMIC_H
@@ -109,5 +110,32 @@#define smp_mb__before_atomic_inc () barrier()#define smp_mb__after_atomic_inc () barrier() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); + +return tmp; +} +#endif #endif
include/asm-arm26/atomic.h +28 -0
@@ -12,6 +12,7 @@* 13-04-1997 RMK Made functions atomic! * 07-12-1997 RMK Upgraded for v2.1. * 26-08-1998 PJB Added #ifdef __KERNEL__ +* 02-07-2003 JS Added locked_* * * FIXME - its probably worth seeing what these compile into... */
@@ -111,5 +112,32 @@#define smp_mb__before_atomic_inc () barrier()#define smp_mb__after_atomic_inc () barrier() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); + +return tmp; +} +#endif #endif
include/asm-cris/atomic.h +34 -0
@@ -10,6 +10,11 @@* resource counting etc.. */ +/* +* Authors: ?: ? +* Josef "Jeff" Sipek: <[email protected]> +*/ +/* * Make sure gcc doesn't try to be clever and move things around * on us. We need to use _exactly_ the address the user gave us,
@@ -145,4 +150,33 @@#define smp_mb__before_atomic_inc () barrier()#define smp_mb__after_atomic_inc () barrier() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_add64() +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_set64() +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_get64() +return tmp; +} +#endif
include/asm-h8300/atomic.h +34 -0
@@ -6,6 +6,11 @@* resource counting etc.. */ +/* +* Authors: ?: ? +* Josef "Jeff" Sipek: <[email protected]> +*/ +typedef struct {int counter; }atomic_t ;#define ATOMIC_INIT (i) { (i) }
@@ -104,4 +109,33 @@#define atomic_sub_and_test (i,v) (atomic_sub_return((i), (v)) == 0)#define atomic_dec_and_test (v) (atomic_sub_return(1, (v)) == 0) +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_add64() +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_set64() +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_get64() +return tmp; +} +#endif /* __ARCH_H8300_ATOMIC __ */
include/asm-i386/atomic.h +33 -0
@@ -1,7 +1,13 @@#ifndef __ARCH_I386_ATOMIC__#define __ARCH_I386_ATOMIC__ +/* +* Authors: ?: ? +* Josef "Jeff" Sipek: <[email protected]> +*/ +#include <linux/config.h> +#include <linux/types.h> /* * Atomic operations that C can't guarantee us. Useful for
@@ -201,4 +207,31 @@#define smp_mb__before_atomic_inc () barrier()#define smp_mb__after_atomic_inc () barrier() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); + +return tmp; +} +#endif
include/asm-ia64/atomic.h +18 -0
@@ -11,6 +11,7 @@* * Copyright (C) 1998, 1999, 2002 Hewlett-Packard Co * David Mosberger-Tang <[email protected]> +* Copyright (C) 2003 Josef "Jeff" Sipek <[email protected]> */ #include <linux/types.h>
@@ -107,4 +108,21 @@#define smp_mb__before_atomic_inc () barrier()#define smp_mb__after_atomic_inc () barrier() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ + *a += b; +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ + *a = b; +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +return *a; +} +#endif /* _ASM_IA64_ATOMIC_H */
include/asm-m68k/atomic.h +34 -0
@@ -10,6 +10,11 @@* We do not have SMP m68k systems, so we don't have to deal with that. */ +/* +* Authors: ?: ? +* Josef "Jeff" Sipek: <[email protected]> +*/ +typedef struct {int counter; }atomic_t ;#define ATOMIC_INIT (i) { (i) }
@@ -55,4 +60,33 @@#define smp_mb__before_atomic_inc () barrier()#define smp_mb__after_atomic_inc () barrier() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_add64() +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_set64() +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_get64() +return tmp; +} +#endif /* __ARCH_M68K_ATOMIC __ */
include/asm-m68knommu/atomic.h +34 -0
@@ -9,6 +9,11 @@*/ /* +* Authors: ?: ? +* Josef "Jeff" Sipek: <[email protected]> +*/ + +/* * We do not have SMP m68k systems, so we don't have to deal with that. */
@@ -115,4 +120,33 @@#define atomic_sub_and_test (i,v) (atomic_sub_return((i), (v)) == 0)#define atomic_dec_and_test (v) (atomic_sub_return(1, (v)) == 0) +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_add64() +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_set64() +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_get64() +return tmp; +} +#endif /* __ARCH_M68KNOMMU_ATOMIC __ */
include/asm-mips/atomic.h +30 -0
@@ -10,6 +10,7 @@* for more details. * * Copyright (C) 1996, 1997, 2000 by Ralf Baechle +* Copyright (C) 2003 by Josef "Jeff" Sipek <[email protected]> */ #ifndef __ASM_ATOMIC_H#define __ASM_ATOMIC_H
@@ -277,6 +278,35 @@#define smp_mb__before_atomic_inc () smp_mb()#define smp_mb__after_atomic_inc () smp_mb() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_add64() +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_set64() +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_get64() +return tmp; +} +#endif /* defined(__KERNEL__) */ #endif /* __ASM_ATOMIC_H */
include/asm-mips64/atomic.h +30 -0
@@ -10,6 +10,7 @@* for more details. * * Copyright (C) 1996, 1997, 1999, 2000 by Ralf Baechle +* Copyright (C) 2003 by Josef "Jeff" Sipek <[email protected]> */ #ifndef _ASM_ATOMIC_H#define _ASM_ATOMIC_H
@@ -190,6 +191,35 @@#define smp_mb__before_atomic_inc () smp_mb()#define smp_mb__after_atomic_inc () smp_mb() +#include <linux/spinlock.h> + +static inline void locked_add64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a += b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_add64() +} + +static inline void locked_set64 (u_int64_t * a,u_int64_t b,spinlock_t * lock) +{ +spin_lock (lock); + *a = b; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_set64() +} + +static inline u_int64_t locked_get64 (u_int64_t * a,spinlock_t * lock) +{ +u_int64_t tmp; + +spin_lock (lock); + tmp = *a; +spin_unlock (lock); +#warning need to check implementation linux/include/asm/atomic.h: locked_get64() +return tmp; +} +#endif /* defined(__KERNEL__) */ #endif /* _ASM_ATOMIC_H */