Go to the documentation of this file. 1 #ifndef _ASM_GENERIC_BITOPS_ATOMIC_H_
2 #define _ASM_GENERIC_BITOPS_ATOMIC_H_
8 #include <asm/spinlock.h>
15 # define ATOMIC_HASH_SIZE 4
16 # define ATOMIC_HASH(a) (&(__atomic_hash[ (((unsigned long) a)/L1_CACHE_BYTES) & (ATOMIC_HASH_SIZE-1) ]))
22 #define _atomic_spin_lock_irqsave(l,f) do { \
23 arch_spinlock_t *s = ATOMIC_HASH(l); \
28 #define _atomic_spin_unlock_irqrestore(l,f) do { \
29 arch_spinlock_t *s = ATOMIC_HASH(l); \
30 arch_spin_unlock(s); \
31 local_irq_restore(f); \
36 # define _atomic_spin_lock_irqsave(l,f) do { local_irq_save(f); } while (0)
37 # define _atomic_spin_unlock_irqrestore(l,f) do { local_irq_restore(f); } while (0)
65 static inline void set_bit(
int nr,
volatile unsigned long *
addr)
68 unsigned long *
p = ((
unsigned long *)addr) +
BIT_WORD(nr);
89 unsigned long *
p = ((
unsigned long *)addr) +
BIT_WORD(nr);
110 unsigned long *
p = ((
unsigned long *)addr) +
BIT_WORD(nr);
130 unsigned long *
p = ((
unsigned long *)addr) +
BIT_WORD(nr);
139 return (old & mask) != 0;
154 unsigned long *p = ((
unsigned long *)addr) +
BIT_WORD(nr);
163 return (old & mask) != 0;
177 unsigned long *p = ((
unsigned long *)addr) +
BIT_WORD(nr);
186 return (old & mask) != 0;