diff options
author | David Howells <dhowells@redhat.com> | 2012-03-28 18:30:02 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2012-03-28 18:30:02 +0100 |
commit | 4eb14db4440febb7e560eb8ab2c099bc6e11a0ac (patch) | |
tree | 6a4d408111b670220c1515c1f688657c65b757cd /arch/score/include/asm/cmpxchg.h | |
parent | a0616cdebcfd575dcd4c46102d1b52fbb827fc29 (diff) |
Disintegrate asm/system.h for Score
Disintegrate asm/system.h for Score. Not compiled.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Chen Liqin <liqin.chen@sunplusct.com>
Diffstat (limited to 'arch/score/include/asm/cmpxchg.h')
-rw-r--r-- | arch/score/include/asm/cmpxchg.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/arch/score/include/asm/cmpxchg.h b/arch/score/include/asm/cmpxchg.h new file mode 100644 index 000000000000..f384839c3ee5 --- /dev/null +++ b/arch/score/include/asm/cmpxchg.h @@ -0,0 +1,49 @@ +#ifndef _ASM_SCORE_CMPXCHG_H +#define _ASM_SCORE_CMPXCHG_H + +#include <linux/irqflags.h> + +struct __xchg_dummy { unsigned long a[100]; }; +#define __xg(x) ((struct __xchg_dummy *)(x)) + +static inline +unsigned long __xchg(volatile unsigned long *m, unsigned long val) +{ + unsigned long retval; + unsigned long flags; + + local_irq_save(flags); + retval = *m; + *m = val; + local_irq_restore(flags); + return retval; +} + +#define xchg(ptr, v) \ + ((__typeof__(*(ptr))) __xchg((unsigned long *)(ptr), \ + (unsigned long)(v))) + +static inline unsigned long __cmpxchg(volatile unsigned long *m, + unsigned long old, unsigned long new) +{ + unsigned long retval; + unsigned long flags; + + local_irq_save(flags); + retval = *m; + if (retval == old) + *m = new; + local_irq_restore(flags); + return retval; +} + +#define cmpxchg(ptr, o, n) \ + ((__typeof__(*(ptr))) __cmpxchg((unsigned long *)(ptr), \ + (unsigned long)(o), \ + (unsigned long)(n))) + +#define __HAVE_ARCH_CMPXCHG 1 + +#include <asm-generic/cmpxchg-local.h> + +#endif /* _ASM_SCORE_CMPXCHG_H */ |