mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-18 09:05:10 +00:00
Based-on-patch-from: Andrey Vagin <avagin@openvz.org> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Acked-by: Andrey Vagin <avagin@openvz.org>
44 lines
836 B
C
44 lines
836 B
C
#ifndef ATOMIC_H__
|
|
#define ATOMIC_H__
|
|
|
|
#include "types.h"
|
|
|
|
#define atomic_set(mem, v) \
|
|
({ \
|
|
asm volatile ("lock xchg %0, %1\n" \
|
|
: "+r" (v), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
})
|
|
|
|
#define atomic_get(mem) \
|
|
({ \
|
|
u32 ret__ = 0; \
|
|
asm volatile ("lock xadd %0, %1\n" \
|
|
: "+r" (ret__), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
ret__; \
|
|
})
|
|
|
|
#define atomic_inc(mem) \
|
|
({ \
|
|
u32 ret__ = 1; \
|
|
asm volatile ("lock xadd %0, %1\n" \
|
|
: "+r" (ret__), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
ret__; \
|
|
})
|
|
|
|
#define atomic_dec(mem) \
|
|
({ \
|
|
u32 ret__ = -1; \
|
|
asm volatile ("lock xadd %0, %1\n" \
|
|
: "+r" (ret__), "+m" (*mem) \
|
|
: \
|
|
: "cc", "memory"); \
|
|
ret__; \
|
|
})
|
|
|
|
#endif /* ATOMIC_H__ */
|