[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v5 22/33] atomic: introduce cmpxchg_bool
From: |
Alex Bennée |
Subject: |
[Qemu-devel] [PATCH v5 22/33] atomic: introduce cmpxchg_bool |
Date: |
Thu, 27 Oct 2016 16:10:19 +0100 |
This allows for slightly neater code when checking for success of a
cmpxchg operation.
Signed-off-by: Alex Bennée <address@hidden>
---
v4 (base-patches)
- brought forward from ARM enabling patches
- remove the un-needed extra temps
---
include/qemu/atomic.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h
index 49cf55f..bd74b75 100644
--- a/include/qemu/atomic.h
+++ b/include/qemu/atomic.h
@@ -205,6 +205,14 @@
atomic_cmpxchg__nocheck(ptr, old, new); \
})
+#define atomic_bool_cmpxchg(ptr, old, new) \
+ ({ \
+ typeof(*ptr) _old = (old), _new = (new); \
+ __atomic_compare_exchange(ptr, &_old, &_new, false, \
+ __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); \
+ })
+
+
/* Provide shorter names for GCC atomic builtins, return old value */
#define atomic_fetch_inc(ptr) __atomic_fetch_add(ptr, 1, __ATOMIC_SEQ_CST)
#define atomic_fetch_dec(ptr) __atomic_fetch_sub(ptr, 1, __ATOMIC_SEQ_CST)
@@ -432,6 +440,7 @@
#define atomic_cmpxchg(ptr, old, new) __sync_val_compare_and_swap(ptr, old,
new)
#define atomic_cmpxchg__nocheck(ptr, old, new) atomic_cmpxchg(ptr, old, new)
+#define atomic_bool_cmpxchg(ptr, old, new)
__sync_bool_compare_and_swap(ptr, old, new)
/* And even shorter names that return void. */
#define atomic_inc(ptr) ((void) __sync_fetch_and_add(ptr, 1))
--
2.10.1
- [Qemu-devel] [PATCH v5 07/33] linux-user/elfload: ensure mmap_lock() held while setting up, (continued)
- [Qemu-devel] [PATCH v5 07/33] linux-user/elfload: ensure mmap_lock() held while setting up, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 08/33] translate-all: Add assert_(memory|tb)_lock annotations, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 10/33] target-arm/arm-powerctl: wake up sleeping CPUs, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 03/33] translate-all: add DEBUG_LOCKING asserts, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 09/33] tcg: protect translation related stuff with tb_lock., Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 12/33] tcg: cpus rm tcg_exec_all(), Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 14/33] tcg: add kick timer for single-threaded vCPU emulation, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 13/33] tcg: add options for enabling MTTCG, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 17/33] cpus: re-factor out handle_icount_deadline, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 22/33] atomic: introduce cmpxchg_bool,
Alex Bennée <=
- [Qemu-devel] [PATCH v5 16/33] tcg: drop global lock during TCG code execution, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 18/33] tcg: remove global exit_request, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 15/33] tcg: rename tcg_current_cpu to tcg_current_rr_cpu, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 06/33] tcg: comment on which functions have to be called with tb_lock held, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 11/33] tcg: move tcg_exec_all and helpers above thread fn, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 27/33] cputlb: atomically update tlb fields used by tlb_reset_dirty, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 24/33] cputlb: add assert_cpu_is_self checks, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 25/33] cputlb: introduce tlb_flush_* async work., Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 31/33] target-arm: ensure BQL taken for ARM_CP_IO register access, Alex Bennée, 2016/10/27
- [Qemu-devel] [PATCH v5 30/33] target-arm/cpu: don't reset TLB structures, use cputlb to do it, Alex Bennée, 2016/10/27