Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.13 50 lines 1.7 kB view raw
1#ifndef _ASM_IA64_LOCAL_H 2#define _ASM_IA64_LOCAL_H 3 4/* 5 * Copyright (C) 2003 Hewlett-Packard Co 6 * David Mosberger-Tang <davidm@hpl.hp.com> 7 */ 8 9#include <linux/percpu.h> 10 11typedef struct { 12 atomic64_t val; 13} local_t; 14 15#define LOCAL_INIT(i) ((local_t) { { (i) } }) 16#define local_read(l) atomic64_read(&(l)->val) 17#define local_set(l, i) atomic64_set(&(l)->val, i) 18#define local_inc(l) atomic64_inc(&(l)->val) 19#define local_dec(l) atomic64_dec(&(l)->val) 20#define local_add(l) atomic64_add(&(l)->val) 21#define local_sub(l) atomic64_sub(&(l)->val) 22 23/* Non-atomic variants, i.e., preemption disabled and won't be touched in interrupt, etc. */ 24 25#define __local_inc(l) (++(l)->val.counter) 26#define __local_dec(l) (--(l)->val.counter) 27#define __local_add(i,l) ((l)->val.counter += (i)) 28#define __local_sub(i,l) ((l)->val.counter -= (i)) 29 30/* 31 * Use these for per-cpu local_t variables. Note they take a variable (eg. mystruct.foo), 32 * not an address. 33 */ 34#define cpu_local_read(v) local_read(&__ia64_per_cpu_var(v)) 35#define cpu_local_set(v, i) local_set(&__ia64_per_cpu_var(v), (i)) 36#define cpu_local_inc(v) local_inc(&__ia64_per_cpu_var(v)) 37#define cpu_local_dec(v) local_dec(&__ia64_per_cpu_var(v)) 38#define cpu_local_add(i, v) local_add((i), &__ia64_per_cpu_var(v)) 39#define cpu_local_sub(i, v) local_sub((i), &__ia64_per_cpu_var(v)) 40 41/* 42 * Non-atomic increments, i.e., preemption disabled and won't be touched in interrupt, 43 * etc. 44 */ 45#define __cpu_local_inc(v) __local_inc(&__ia64_per_cpu_var(v)) 46#define __cpu_local_dec(v) __local_dec(&__ia64_per_cpu_var(v)) 47#define __cpu_local_add(i, v) __local_add((i), &__ia64_per_cpu_var(v)) 48#define __cpu_local_sub(i, v) __local_sub((i), &__ia64_per_cpu_var(v)) 49 50#endif /* _ASM_IA64_LOCAL_H */