1 #ifndef _ASM_IA64_LOCAL_H
 
   2 #define _ASM_IA64_LOCAL_H
 
   5  * Copyright (C) 2003 Hewlett-Packard Co
 
   6  *      David Mosberger-Tang <davidm@hpl.hp.com>
 
   9 #include <linux/percpu.h>
 
  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(i, l) atomic64_add((i), &(l)->val)
 
  21 #define local_sub(i, l) atomic64_sub((i), &(l)->val)
 
  23 /* Non-atomic variants, i.e., preemption disabled and won't be touched in interrupt, etc.  */
 
  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))
 
  31  * Use these for per-cpu local_t variables.  Note they take a variable (eg. mystruct.foo),
 
  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))
 
  42  * Non-atomic increments, i.e., preemption disabled and won't be touched in interrupt,
 
  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))
 
  50 #endif /* _ASM_IA64_LOCAL_H */