diff options
| author | Mark Rutland <[email protected]> | 2023-06-05 08:01:01 +0100 |
|---|---|---|
| committer | Peter Zijlstra <[email protected]> | 2023-06-05 09:57:14 +0200 |
| commit | d12157efc8e083c77d054675fcdd594f54cc7e2b (patch) | |
| tree | 9be23f46b4b8db9d3e36a8b551d8961d8d41822d /scripts/atomic | |
| parent | a7bafa7969da1c0e9c342c792d8224078d1c491c (diff) | |
locking/atomic: make atomic*_{cmp,}xchg optional
Most architectures define the atomic/atomic64 xchg and cmpxchg
operations in terms of arch_xchg and arch_cmpxchg respectfully.
Add fallbacks for these cases and remove the trivial cases from arch
code. On some architectures the existing definitions are kept as these
are used to build other arch_atomic*() operations.
Signed-off-by: Mark Rutland <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Reviewed-by: Kees Cook <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Diffstat (limited to 'scripts/atomic')
| -rw-r--r-- | scripts/atomic/fallbacks/cmpxchg | 7 | ||||
| -rw-r--r-- | scripts/atomic/fallbacks/xchg | 7 |
2 files changed, 14 insertions, 0 deletions
diff --git a/scripts/atomic/fallbacks/cmpxchg b/scripts/atomic/fallbacks/cmpxchg new file mode 100644 index 000000000000..87cd010f98d5 --- /dev/null +++ b/scripts/atomic/fallbacks/cmpxchg @@ -0,0 +1,7 @@ +cat <<EOF +static __always_inline ${int} +arch_${atomic}_cmpxchg${order}(${atomic}_t *v, ${int} old, ${int} new) +{ + return arch_cmpxchg${order}(&v->counter, old, new); +} +EOF diff --git a/scripts/atomic/fallbacks/xchg b/scripts/atomic/fallbacks/xchg new file mode 100644 index 000000000000..733b8980b2f3 --- /dev/null +++ b/scripts/atomic/fallbacks/xchg @@ -0,0 +1,7 @@ +cat <<EOF +static __always_inline ${int} +arch_${atomic}_xchg${order}(${atomic}_t *v, ${int} new) +{ + return arch_xchg${order}(&v->counter, new); +} +EOF |