blob: cd223b68b69db3f709ab6b615139d823ca5b86a4 [file] [log] [blame]
David Brazdil0f672f62019-12-10 10:32:29 +00001// SPDX-License-Identifier: GPL-2.0
2
3// Generated by scripts/atomic/gen-atomic-instrumented.sh
4// DO NOT MODIFY THIS FILE DIRECTLY
5
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00006/*
7 * This file provides wrappers with KASAN instrumentation for atomic operations.
8 * To use this functionality an arch's atomic.h file needs to define all
9 * atomic operations with arch_ prefix (e.g. arch_atomic_read()) and include
10 * this file at the end. This file provides atomic_read() that forwards to
11 * arch_atomic_read() for actual atomic operation.
12 * Note: if an arch atomic operation is implemented by means of other atomic
13 * operations (e.g. atomic_read()/atomic_cmpxchg() loop), then it needs to use
14 * arch_ variants (i.e. arch_atomic_read()/arch_atomic_cmpxchg()) to avoid
15 * double instrumentation.
16 */
David Brazdil0f672f62019-12-10 10:32:29 +000017#ifndef _ASM_GENERIC_ATOMIC_INSTRUMENTED_H
18#define _ASM_GENERIC_ATOMIC_INSTRUMENTED_H
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000019
20#include <linux/build_bug.h>
Olivier Deprez157378f2022-04-04 15:47:50 +020021#include <linux/compiler.h>
22#include <linux/instrumented.h>
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000023
Olivier Deprez157378f2022-04-04 15:47:50 +020024static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +000025atomic_read(const atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000026{
Olivier Deprez157378f2022-04-04 15:47:50 +020027 instrument_atomic_read(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000028 return arch_atomic_read(v);
29}
David Brazdil0f672f62019-12-10 10:32:29 +000030#define atomic_read atomic_read
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000031
David Brazdil0f672f62019-12-10 10:32:29 +000032#if defined(arch_atomic_read_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +020033static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +000034atomic_read_acquire(const atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000035{
Olivier Deprez157378f2022-04-04 15:47:50 +020036 instrument_atomic_read(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +000037 return arch_atomic_read_acquire(v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000038}
David Brazdil0f672f62019-12-10 10:32:29 +000039#define atomic_read_acquire atomic_read_acquire
40#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000041
Olivier Deprez157378f2022-04-04 15:47:50 +020042static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +000043atomic_set(atomic_t *v, int i)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000044{
Olivier Deprez157378f2022-04-04 15:47:50 +020045 instrument_atomic_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000046 arch_atomic_set(v, i);
47}
David Brazdil0f672f62019-12-10 10:32:29 +000048#define atomic_set atomic_set
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000049
David Brazdil0f672f62019-12-10 10:32:29 +000050#if defined(arch_atomic_set_release)
Olivier Deprez157378f2022-04-04 15:47:50 +020051static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +000052atomic_set_release(atomic_t *v, int i)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000053{
Olivier Deprez157378f2022-04-04 15:47:50 +020054 instrument_atomic_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +000055 arch_atomic_set_release(v, i);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000056}
David Brazdil0f672f62019-12-10 10:32:29 +000057#define atomic_set_release atomic_set_release
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000058#endif
59
Olivier Deprez157378f2022-04-04 15:47:50 +020060static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +000061atomic_add(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000062{
Olivier Deprez157378f2022-04-04 15:47:50 +020063 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000064 arch_atomic_add(i, v);
65}
David Brazdil0f672f62019-12-10 10:32:29 +000066#define atomic_add atomic_add
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000067
David Brazdil0f672f62019-12-10 10:32:29 +000068#if !defined(arch_atomic_add_return_relaxed) || defined(arch_atomic_add_return)
Olivier Deprez157378f2022-04-04 15:47:50 +020069static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +000070atomic_add_return(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000071{
Olivier Deprez157378f2022-04-04 15:47:50 +020072 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000073 return arch_atomic_add_return(i, v);
74}
David Brazdil0f672f62019-12-10 10:32:29 +000075#define atomic_add_return atomic_add_return
76#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000077
David Brazdil0f672f62019-12-10 10:32:29 +000078#if defined(arch_atomic_add_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +020079static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +000080atomic_add_return_acquire(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000081{
Olivier Deprez157378f2022-04-04 15:47:50 +020082 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +000083 return arch_atomic_add_return_acquire(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000084}
David Brazdil0f672f62019-12-10 10:32:29 +000085#define atomic_add_return_acquire atomic_add_return_acquire
86#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000087
David Brazdil0f672f62019-12-10 10:32:29 +000088#if defined(arch_atomic_add_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +020089static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +000090atomic_add_return_release(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000091{
Olivier Deprez157378f2022-04-04 15:47:50 +020092 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +000093 return arch_atomic_add_return_release(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000094}
David Brazdil0f672f62019-12-10 10:32:29 +000095#define atomic_add_return_release atomic_add_return_release
96#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000097
David Brazdil0f672f62019-12-10 10:32:29 +000098#if defined(arch_atomic_add_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +020099static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000100atomic_add_return_relaxed(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000101{
Olivier Deprez157378f2022-04-04 15:47:50 +0200102 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000103 return arch_atomic_add_return_relaxed(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000104}
David Brazdil0f672f62019-12-10 10:32:29 +0000105#define atomic_add_return_relaxed atomic_add_return_relaxed
106#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000107
David Brazdil0f672f62019-12-10 10:32:29 +0000108#if !defined(arch_atomic_fetch_add_relaxed) || defined(arch_atomic_fetch_add)
Olivier Deprez157378f2022-04-04 15:47:50 +0200109static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000110atomic_fetch_add(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000111{
Olivier Deprez157378f2022-04-04 15:47:50 +0200112 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000113 return arch_atomic_fetch_add(i, v);
114}
David Brazdil0f672f62019-12-10 10:32:29 +0000115#define atomic_fetch_add atomic_fetch_add
116#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000117
David Brazdil0f672f62019-12-10 10:32:29 +0000118#if defined(arch_atomic_fetch_add_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200119static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000120atomic_fetch_add_acquire(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000121{
Olivier Deprez157378f2022-04-04 15:47:50 +0200122 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000123 return arch_atomic_fetch_add_acquire(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000124}
David Brazdil0f672f62019-12-10 10:32:29 +0000125#define atomic_fetch_add_acquire atomic_fetch_add_acquire
126#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000127
David Brazdil0f672f62019-12-10 10:32:29 +0000128#if defined(arch_atomic_fetch_add_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200129static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000130atomic_fetch_add_release(int i, atomic_t *v)
131{
Olivier Deprez157378f2022-04-04 15:47:50 +0200132 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000133 return arch_atomic_fetch_add_release(i, v);
134}
135#define atomic_fetch_add_release atomic_fetch_add_release
136#endif
137
138#if defined(arch_atomic_fetch_add_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200139static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000140atomic_fetch_add_relaxed(int i, atomic_t *v)
141{
Olivier Deprez157378f2022-04-04 15:47:50 +0200142 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000143 return arch_atomic_fetch_add_relaxed(i, v);
144}
145#define atomic_fetch_add_relaxed atomic_fetch_add_relaxed
146#endif
147
Olivier Deprez157378f2022-04-04 15:47:50 +0200148static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000149atomic_sub(int i, atomic_t *v)
150{
Olivier Deprez157378f2022-04-04 15:47:50 +0200151 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000152 arch_atomic_sub(i, v);
153}
154#define atomic_sub atomic_sub
155
156#if !defined(arch_atomic_sub_return_relaxed) || defined(arch_atomic_sub_return)
Olivier Deprez157378f2022-04-04 15:47:50 +0200157static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000158atomic_sub_return(int i, atomic_t *v)
159{
Olivier Deprez157378f2022-04-04 15:47:50 +0200160 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000161 return arch_atomic_sub_return(i, v);
162}
163#define atomic_sub_return atomic_sub_return
164#endif
165
166#if defined(arch_atomic_sub_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200167static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000168atomic_sub_return_acquire(int i, atomic_t *v)
169{
Olivier Deprez157378f2022-04-04 15:47:50 +0200170 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000171 return arch_atomic_sub_return_acquire(i, v);
172}
173#define atomic_sub_return_acquire atomic_sub_return_acquire
174#endif
175
176#if defined(arch_atomic_sub_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200177static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000178atomic_sub_return_release(int i, atomic_t *v)
179{
Olivier Deprez157378f2022-04-04 15:47:50 +0200180 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000181 return arch_atomic_sub_return_release(i, v);
182}
183#define atomic_sub_return_release atomic_sub_return_release
184#endif
185
186#if defined(arch_atomic_sub_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200187static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000188atomic_sub_return_relaxed(int i, atomic_t *v)
189{
Olivier Deprez157378f2022-04-04 15:47:50 +0200190 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000191 return arch_atomic_sub_return_relaxed(i, v);
192}
193#define atomic_sub_return_relaxed atomic_sub_return_relaxed
194#endif
195
196#if !defined(arch_atomic_fetch_sub_relaxed) || defined(arch_atomic_fetch_sub)
Olivier Deprez157378f2022-04-04 15:47:50 +0200197static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000198atomic_fetch_sub(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000199{
Olivier Deprez157378f2022-04-04 15:47:50 +0200200 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000201 return arch_atomic_fetch_sub(i, v);
202}
David Brazdil0f672f62019-12-10 10:32:29 +0000203#define atomic_fetch_sub atomic_fetch_sub
204#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000205
David Brazdil0f672f62019-12-10 10:32:29 +0000206#if defined(arch_atomic_fetch_sub_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200207static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000208atomic_fetch_sub_acquire(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000209{
Olivier Deprez157378f2022-04-04 15:47:50 +0200210 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000211 return arch_atomic_fetch_sub_acquire(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000212}
David Brazdil0f672f62019-12-10 10:32:29 +0000213#define atomic_fetch_sub_acquire atomic_fetch_sub_acquire
214#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000215
David Brazdil0f672f62019-12-10 10:32:29 +0000216#if defined(arch_atomic_fetch_sub_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200217static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000218atomic_fetch_sub_release(int i, atomic_t *v)
219{
Olivier Deprez157378f2022-04-04 15:47:50 +0200220 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000221 return arch_atomic_fetch_sub_release(i, v);
222}
223#define atomic_fetch_sub_release atomic_fetch_sub_release
224#endif
225
226#if defined(arch_atomic_fetch_sub_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200227static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000228atomic_fetch_sub_relaxed(int i, atomic_t *v)
229{
Olivier Deprez157378f2022-04-04 15:47:50 +0200230 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000231 return arch_atomic_fetch_sub_relaxed(i, v);
232}
233#define atomic_fetch_sub_relaxed atomic_fetch_sub_relaxed
234#endif
235
236#if defined(arch_atomic_inc)
Olivier Deprez157378f2022-04-04 15:47:50 +0200237static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000238atomic_inc(atomic_t *v)
239{
Olivier Deprez157378f2022-04-04 15:47:50 +0200240 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000241 arch_atomic_inc(v);
242}
243#define atomic_inc atomic_inc
244#endif
245
246#if defined(arch_atomic_inc_return)
Olivier Deprez157378f2022-04-04 15:47:50 +0200247static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000248atomic_inc_return(atomic_t *v)
249{
Olivier Deprez157378f2022-04-04 15:47:50 +0200250 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000251 return arch_atomic_inc_return(v);
252}
253#define atomic_inc_return atomic_inc_return
254#endif
255
256#if defined(arch_atomic_inc_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200257static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000258atomic_inc_return_acquire(atomic_t *v)
259{
Olivier Deprez157378f2022-04-04 15:47:50 +0200260 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000261 return arch_atomic_inc_return_acquire(v);
262}
263#define atomic_inc_return_acquire atomic_inc_return_acquire
264#endif
265
266#if defined(arch_atomic_inc_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200267static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000268atomic_inc_return_release(atomic_t *v)
269{
Olivier Deprez157378f2022-04-04 15:47:50 +0200270 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000271 return arch_atomic_inc_return_release(v);
272}
273#define atomic_inc_return_release atomic_inc_return_release
274#endif
275
276#if defined(arch_atomic_inc_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200277static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000278atomic_inc_return_relaxed(atomic_t *v)
279{
Olivier Deprez157378f2022-04-04 15:47:50 +0200280 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000281 return arch_atomic_inc_return_relaxed(v);
282}
283#define atomic_inc_return_relaxed atomic_inc_return_relaxed
284#endif
285
286#if defined(arch_atomic_fetch_inc)
Olivier Deprez157378f2022-04-04 15:47:50 +0200287static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000288atomic_fetch_inc(atomic_t *v)
289{
Olivier Deprez157378f2022-04-04 15:47:50 +0200290 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000291 return arch_atomic_fetch_inc(v);
292}
293#define atomic_fetch_inc atomic_fetch_inc
294#endif
295
296#if defined(arch_atomic_fetch_inc_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200297static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000298atomic_fetch_inc_acquire(atomic_t *v)
299{
Olivier Deprez157378f2022-04-04 15:47:50 +0200300 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000301 return arch_atomic_fetch_inc_acquire(v);
302}
303#define atomic_fetch_inc_acquire atomic_fetch_inc_acquire
304#endif
305
306#if defined(arch_atomic_fetch_inc_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200307static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000308atomic_fetch_inc_release(atomic_t *v)
309{
Olivier Deprez157378f2022-04-04 15:47:50 +0200310 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000311 return arch_atomic_fetch_inc_release(v);
312}
313#define atomic_fetch_inc_release atomic_fetch_inc_release
314#endif
315
316#if defined(arch_atomic_fetch_inc_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200317static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000318atomic_fetch_inc_relaxed(atomic_t *v)
319{
Olivier Deprez157378f2022-04-04 15:47:50 +0200320 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000321 return arch_atomic_fetch_inc_relaxed(v);
322}
323#define atomic_fetch_inc_relaxed atomic_fetch_inc_relaxed
324#endif
325
326#if defined(arch_atomic_dec)
Olivier Deprez157378f2022-04-04 15:47:50 +0200327static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000328atomic_dec(atomic_t *v)
329{
Olivier Deprez157378f2022-04-04 15:47:50 +0200330 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000331 arch_atomic_dec(v);
332}
333#define atomic_dec atomic_dec
334#endif
335
336#if defined(arch_atomic_dec_return)
Olivier Deprez157378f2022-04-04 15:47:50 +0200337static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000338atomic_dec_return(atomic_t *v)
339{
Olivier Deprez157378f2022-04-04 15:47:50 +0200340 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000341 return arch_atomic_dec_return(v);
342}
343#define atomic_dec_return atomic_dec_return
344#endif
345
346#if defined(arch_atomic_dec_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200347static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000348atomic_dec_return_acquire(atomic_t *v)
349{
Olivier Deprez157378f2022-04-04 15:47:50 +0200350 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000351 return arch_atomic_dec_return_acquire(v);
352}
353#define atomic_dec_return_acquire atomic_dec_return_acquire
354#endif
355
356#if defined(arch_atomic_dec_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200357static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000358atomic_dec_return_release(atomic_t *v)
359{
Olivier Deprez157378f2022-04-04 15:47:50 +0200360 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000361 return arch_atomic_dec_return_release(v);
362}
363#define atomic_dec_return_release atomic_dec_return_release
364#endif
365
366#if defined(arch_atomic_dec_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200367static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000368atomic_dec_return_relaxed(atomic_t *v)
369{
Olivier Deprez157378f2022-04-04 15:47:50 +0200370 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000371 return arch_atomic_dec_return_relaxed(v);
372}
373#define atomic_dec_return_relaxed atomic_dec_return_relaxed
374#endif
375
376#if defined(arch_atomic_fetch_dec)
Olivier Deprez157378f2022-04-04 15:47:50 +0200377static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000378atomic_fetch_dec(atomic_t *v)
379{
Olivier Deprez157378f2022-04-04 15:47:50 +0200380 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000381 return arch_atomic_fetch_dec(v);
382}
383#define atomic_fetch_dec atomic_fetch_dec
384#endif
385
386#if defined(arch_atomic_fetch_dec_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200387static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000388atomic_fetch_dec_acquire(atomic_t *v)
389{
Olivier Deprez157378f2022-04-04 15:47:50 +0200390 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000391 return arch_atomic_fetch_dec_acquire(v);
392}
393#define atomic_fetch_dec_acquire atomic_fetch_dec_acquire
394#endif
395
396#if defined(arch_atomic_fetch_dec_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200397static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000398atomic_fetch_dec_release(atomic_t *v)
399{
Olivier Deprez157378f2022-04-04 15:47:50 +0200400 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000401 return arch_atomic_fetch_dec_release(v);
402}
403#define atomic_fetch_dec_release atomic_fetch_dec_release
404#endif
405
406#if defined(arch_atomic_fetch_dec_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200407static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000408atomic_fetch_dec_relaxed(atomic_t *v)
409{
Olivier Deprez157378f2022-04-04 15:47:50 +0200410 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000411 return arch_atomic_fetch_dec_relaxed(v);
412}
413#define atomic_fetch_dec_relaxed atomic_fetch_dec_relaxed
414#endif
415
Olivier Deprez157378f2022-04-04 15:47:50 +0200416static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000417atomic_and(int i, atomic_t *v)
418{
Olivier Deprez157378f2022-04-04 15:47:50 +0200419 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000420 arch_atomic_and(i, v);
421}
422#define atomic_and atomic_and
423
424#if !defined(arch_atomic_fetch_and_relaxed) || defined(arch_atomic_fetch_and)
Olivier Deprez157378f2022-04-04 15:47:50 +0200425static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000426atomic_fetch_and(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000427{
Olivier Deprez157378f2022-04-04 15:47:50 +0200428 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000429 return arch_atomic_fetch_and(i, v);
430}
David Brazdil0f672f62019-12-10 10:32:29 +0000431#define atomic_fetch_and atomic_fetch_and
432#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000433
David Brazdil0f672f62019-12-10 10:32:29 +0000434#if defined(arch_atomic_fetch_and_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200435static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000436atomic_fetch_and_acquire(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000437{
Olivier Deprez157378f2022-04-04 15:47:50 +0200438 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000439 return arch_atomic_fetch_and_acquire(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000440}
David Brazdil0f672f62019-12-10 10:32:29 +0000441#define atomic_fetch_and_acquire atomic_fetch_and_acquire
442#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000443
David Brazdil0f672f62019-12-10 10:32:29 +0000444#if defined(arch_atomic_fetch_and_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200445static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000446atomic_fetch_and_release(int i, atomic_t *v)
447{
Olivier Deprez157378f2022-04-04 15:47:50 +0200448 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000449 return arch_atomic_fetch_and_release(i, v);
450}
451#define atomic_fetch_and_release atomic_fetch_and_release
452#endif
453
454#if defined(arch_atomic_fetch_and_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200455static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000456atomic_fetch_and_relaxed(int i, atomic_t *v)
457{
Olivier Deprez157378f2022-04-04 15:47:50 +0200458 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000459 return arch_atomic_fetch_and_relaxed(i, v);
460}
461#define atomic_fetch_and_relaxed atomic_fetch_and_relaxed
462#endif
463
464#if defined(arch_atomic_andnot)
Olivier Deprez157378f2022-04-04 15:47:50 +0200465static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000466atomic_andnot(int i, atomic_t *v)
467{
Olivier Deprez157378f2022-04-04 15:47:50 +0200468 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000469 arch_atomic_andnot(i, v);
470}
471#define atomic_andnot atomic_andnot
472#endif
473
474#if defined(arch_atomic_fetch_andnot)
Olivier Deprez157378f2022-04-04 15:47:50 +0200475static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000476atomic_fetch_andnot(int i, atomic_t *v)
477{
Olivier Deprez157378f2022-04-04 15:47:50 +0200478 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000479 return arch_atomic_fetch_andnot(i, v);
480}
481#define atomic_fetch_andnot atomic_fetch_andnot
482#endif
483
484#if defined(arch_atomic_fetch_andnot_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200485static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000486atomic_fetch_andnot_acquire(int i, atomic_t *v)
487{
Olivier Deprez157378f2022-04-04 15:47:50 +0200488 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000489 return arch_atomic_fetch_andnot_acquire(i, v);
490}
491#define atomic_fetch_andnot_acquire atomic_fetch_andnot_acquire
492#endif
493
494#if defined(arch_atomic_fetch_andnot_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200495static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000496atomic_fetch_andnot_release(int i, atomic_t *v)
497{
Olivier Deprez157378f2022-04-04 15:47:50 +0200498 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000499 return arch_atomic_fetch_andnot_release(i, v);
500}
501#define atomic_fetch_andnot_release atomic_fetch_andnot_release
502#endif
503
504#if defined(arch_atomic_fetch_andnot_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200505static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000506atomic_fetch_andnot_relaxed(int i, atomic_t *v)
507{
Olivier Deprez157378f2022-04-04 15:47:50 +0200508 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000509 return arch_atomic_fetch_andnot_relaxed(i, v);
510}
511#define atomic_fetch_andnot_relaxed atomic_fetch_andnot_relaxed
512#endif
513
Olivier Deprez157378f2022-04-04 15:47:50 +0200514static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000515atomic_or(int i, atomic_t *v)
516{
Olivier Deprez157378f2022-04-04 15:47:50 +0200517 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000518 arch_atomic_or(i, v);
519}
520#define atomic_or atomic_or
521
522#if !defined(arch_atomic_fetch_or_relaxed) || defined(arch_atomic_fetch_or)
Olivier Deprez157378f2022-04-04 15:47:50 +0200523static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000524atomic_fetch_or(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000525{
Olivier Deprez157378f2022-04-04 15:47:50 +0200526 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000527 return arch_atomic_fetch_or(i, v);
528}
David Brazdil0f672f62019-12-10 10:32:29 +0000529#define atomic_fetch_or atomic_fetch_or
530#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000531
David Brazdil0f672f62019-12-10 10:32:29 +0000532#if defined(arch_atomic_fetch_or_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200533static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000534atomic_fetch_or_acquire(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000535{
Olivier Deprez157378f2022-04-04 15:47:50 +0200536 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000537 return arch_atomic_fetch_or_acquire(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000538}
David Brazdil0f672f62019-12-10 10:32:29 +0000539#define atomic_fetch_or_acquire atomic_fetch_or_acquire
540#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000541
David Brazdil0f672f62019-12-10 10:32:29 +0000542#if defined(arch_atomic_fetch_or_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200543static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000544atomic_fetch_or_release(int i, atomic_t *v)
545{
Olivier Deprez157378f2022-04-04 15:47:50 +0200546 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000547 return arch_atomic_fetch_or_release(i, v);
548}
549#define atomic_fetch_or_release atomic_fetch_or_release
550#endif
551
552#if defined(arch_atomic_fetch_or_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200553static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000554atomic_fetch_or_relaxed(int i, atomic_t *v)
555{
Olivier Deprez157378f2022-04-04 15:47:50 +0200556 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000557 return arch_atomic_fetch_or_relaxed(i, v);
558}
559#define atomic_fetch_or_relaxed atomic_fetch_or_relaxed
560#endif
561
Olivier Deprez157378f2022-04-04 15:47:50 +0200562static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000563atomic_xor(int i, atomic_t *v)
564{
Olivier Deprez157378f2022-04-04 15:47:50 +0200565 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000566 arch_atomic_xor(i, v);
567}
568#define atomic_xor atomic_xor
569
570#if !defined(arch_atomic_fetch_xor_relaxed) || defined(arch_atomic_fetch_xor)
Olivier Deprez157378f2022-04-04 15:47:50 +0200571static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000572atomic_fetch_xor(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000573{
Olivier Deprez157378f2022-04-04 15:47:50 +0200574 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000575 return arch_atomic_fetch_xor(i, v);
576}
David Brazdil0f672f62019-12-10 10:32:29 +0000577#define atomic_fetch_xor atomic_fetch_xor
578#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000579
David Brazdil0f672f62019-12-10 10:32:29 +0000580#if defined(arch_atomic_fetch_xor_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200581static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000582atomic_fetch_xor_acquire(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000583{
Olivier Deprez157378f2022-04-04 15:47:50 +0200584 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000585 return arch_atomic_fetch_xor_acquire(i, v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000586}
David Brazdil0f672f62019-12-10 10:32:29 +0000587#define atomic_fetch_xor_acquire atomic_fetch_xor_acquire
588#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000589
David Brazdil0f672f62019-12-10 10:32:29 +0000590#if defined(arch_atomic_fetch_xor_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200591static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000592atomic_fetch_xor_release(int i, atomic_t *v)
593{
Olivier Deprez157378f2022-04-04 15:47:50 +0200594 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000595 return arch_atomic_fetch_xor_release(i, v);
596}
597#define atomic_fetch_xor_release atomic_fetch_xor_release
598#endif
599
600#if defined(arch_atomic_fetch_xor_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200601static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000602atomic_fetch_xor_relaxed(int i, atomic_t *v)
603{
Olivier Deprez157378f2022-04-04 15:47:50 +0200604 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000605 return arch_atomic_fetch_xor_relaxed(i, v);
606}
607#define atomic_fetch_xor_relaxed atomic_fetch_xor_relaxed
608#endif
609
610#if !defined(arch_atomic_xchg_relaxed) || defined(arch_atomic_xchg)
Olivier Deprez157378f2022-04-04 15:47:50 +0200611static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000612atomic_xchg(atomic_t *v, int i)
613{
Olivier Deprez157378f2022-04-04 15:47:50 +0200614 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000615 return arch_atomic_xchg(v, i);
616}
617#define atomic_xchg atomic_xchg
618#endif
619
620#if defined(arch_atomic_xchg_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200621static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000622atomic_xchg_acquire(atomic_t *v, int i)
623{
Olivier Deprez157378f2022-04-04 15:47:50 +0200624 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000625 return arch_atomic_xchg_acquire(v, i);
626}
627#define atomic_xchg_acquire atomic_xchg_acquire
628#endif
629
630#if defined(arch_atomic_xchg_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200631static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000632atomic_xchg_release(atomic_t *v, int i)
633{
Olivier Deprez157378f2022-04-04 15:47:50 +0200634 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000635 return arch_atomic_xchg_release(v, i);
636}
637#define atomic_xchg_release atomic_xchg_release
638#endif
639
640#if defined(arch_atomic_xchg_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200641static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000642atomic_xchg_relaxed(atomic_t *v, int i)
643{
Olivier Deprez157378f2022-04-04 15:47:50 +0200644 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000645 return arch_atomic_xchg_relaxed(v, i);
646}
647#define atomic_xchg_relaxed atomic_xchg_relaxed
648#endif
649
650#if !defined(arch_atomic_cmpxchg_relaxed) || defined(arch_atomic_cmpxchg)
Olivier Deprez157378f2022-04-04 15:47:50 +0200651static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000652atomic_cmpxchg(atomic_t *v, int old, int new)
653{
Olivier Deprez157378f2022-04-04 15:47:50 +0200654 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000655 return arch_atomic_cmpxchg(v, old, new);
656}
657#define atomic_cmpxchg atomic_cmpxchg
658#endif
659
660#if defined(arch_atomic_cmpxchg_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200661static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000662atomic_cmpxchg_acquire(atomic_t *v, int old, int new)
663{
Olivier Deprez157378f2022-04-04 15:47:50 +0200664 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000665 return arch_atomic_cmpxchg_acquire(v, old, new);
666}
667#define atomic_cmpxchg_acquire atomic_cmpxchg_acquire
668#endif
669
670#if defined(arch_atomic_cmpxchg_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200671static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000672atomic_cmpxchg_release(atomic_t *v, int old, int new)
673{
Olivier Deprez157378f2022-04-04 15:47:50 +0200674 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000675 return arch_atomic_cmpxchg_release(v, old, new);
676}
677#define atomic_cmpxchg_release atomic_cmpxchg_release
678#endif
679
680#if defined(arch_atomic_cmpxchg_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200681static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000682atomic_cmpxchg_relaxed(atomic_t *v, int old, int new)
683{
Olivier Deprez157378f2022-04-04 15:47:50 +0200684 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000685 return arch_atomic_cmpxchg_relaxed(v, old, new);
686}
687#define atomic_cmpxchg_relaxed atomic_cmpxchg_relaxed
688#endif
689
690#if defined(arch_atomic_try_cmpxchg)
Olivier Deprez157378f2022-04-04 15:47:50 +0200691static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000692atomic_try_cmpxchg(atomic_t *v, int *old, int new)
693{
Olivier Deprez157378f2022-04-04 15:47:50 +0200694 instrument_atomic_read_write(v, sizeof(*v));
695 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +0000696 return arch_atomic_try_cmpxchg(v, old, new);
697}
698#define atomic_try_cmpxchg atomic_try_cmpxchg
699#endif
700
701#if defined(arch_atomic_try_cmpxchg_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200702static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000703atomic_try_cmpxchg_acquire(atomic_t *v, int *old, int new)
704{
Olivier Deprez157378f2022-04-04 15:47:50 +0200705 instrument_atomic_read_write(v, sizeof(*v));
706 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +0000707 return arch_atomic_try_cmpxchg_acquire(v, old, new);
708}
709#define atomic_try_cmpxchg_acquire atomic_try_cmpxchg_acquire
710#endif
711
712#if defined(arch_atomic_try_cmpxchg_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200713static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000714atomic_try_cmpxchg_release(atomic_t *v, int *old, int new)
715{
Olivier Deprez157378f2022-04-04 15:47:50 +0200716 instrument_atomic_read_write(v, sizeof(*v));
717 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +0000718 return arch_atomic_try_cmpxchg_release(v, old, new);
719}
720#define atomic_try_cmpxchg_release atomic_try_cmpxchg_release
721#endif
722
723#if defined(arch_atomic_try_cmpxchg_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200724static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000725atomic_try_cmpxchg_relaxed(atomic_t *v, int *old, int new)
726{
Olivier Deprez157378f2022-04-04 15:47:50 +0200727 instrument_atomic_read_write(v, sizeof(*v));
728 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +0000729 return arch_atomic_try_cmpxchg_relaxed(v, old, new);
730}
731#define atomic_try_cmpxchg_relaxed atomic_try_cmpxchg_relaxed
732#endif
733
734#if defined(arch_atomic_sub_and_test)
Olivier Deprez157378f2022-04-04 15:47:50 +0200735static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000736atomic_sub_and_test(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000737{
Olivier Deprez157378f2022-04-04 15:47:50 +0200738 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000739 return arch_atomic_sub_and_test(i, v);
740}
David Brazdil0f672f62019-12-10 10:32:29 +0000741#define atomic_sub_and_test atomic_sub_and_test
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000742#endif
743
David Brazdil0f672f62019-12-10 10:32:29 +0000744#if defined(arch_atomic_dec_and_test)
Olivier Deprez157378f2022-04-04 15:47:50 +0200745static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000746atomic_dec_and_test(atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000747{
Olivier Deprez157378f2022-04-04 15:47:50 +0200748 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000749 return arch_atomic_dec_and_test(v);
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000750}
David Brazdil0f672f62019-12-10 10:32:29 +0000751#define atomic_dec_and_test atomic_dec_and_test
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000752#endif
753
David Brazdil0f672f62019-12-10 10:32:29 +0000754#if defined(arch_atomic_inc_and_test)
Olivier Deprez157378f2022-04-04 15:47:50 +0200755static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000756atomic_inc_and_test(atomic_t *v)
757{
Olivier Deprez157378f2022-04-04 15:47:50 +0200758 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000759 return arch_atomic_inc_and_test(v);
760}
761#define atomic_inc_and_test atomic_inc_and_test
762#endif
763
764#if defined(arch_atomic_add_negative)
Olivier Deprez157378f2022-04-04 15:47:50 +0200765static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000766atomic_add_negative(int i, atomic_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000767{
Olivier Deprez157378f2022-04-04 15:47:50 +0200768 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000769 return arch_atomic_add_negative(i, v);
770}
David Brazdil0f672f62019-12-10 10:32:29 +0000771#define atomic_add_negative atomic_add_negative
Andrew Scullb4b6d4a2019-01-02 15:54:55 +0000772#endif
773
David Brazdil0f672f62019-12-10 10:32:29 +0000774#if defined(arch_atomic_fetch_add_unless)
Olivier Deprez157378f2022-04-04 15:47:50 +0200775static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000776atomic_fetch_add_unless(atomic_t *v, int a, int u)
777{
Olivier Deprez157378f2022-04-04 15:47:50 +0200778 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000779 return arch_atomic_fetch_add_unless(v, a, u);
780}
781#define atomic_fetch_add_unless atomic_fetch_add_unless
782#endif
783
784#if defined(arch_atomic_add_unless)
Olivier Deprez157378f2022-04-04 15:47:50 +0200785static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000786atomic_add_unless(atomic_t *v, int a, int u)
787{
Olivier Deprez157378f2022-04-04 15:47:50 +0200788 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000789 return arch_atomic_add_unless(v, a, u);
790}
791#define atomic_add_unless atomic_add_unless
792#endif
793
794#if defined(arch_atomic_inc_not_zero)
Olivier Deprez157378f2022-04-04 15:47:50 +0200795static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000796atomic_inc_not_zero(atomic_t *v)
797{
Olivier Deprez157378f2022-04-04 15:47:50 +0200798 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000799 return arch_atomic_inc_not_zero(v);
800}
801#define atomic_inc_not_zero atomic_inc_not_zero
802#endif
803
804#if defined(arch_atomic_inc_unless_negative)
Olivier Deprez157378f2022-04-04 15:47:50 +0200805static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000806atomic_inc_unless_negative(atomic_t *v)
807{
Olivier Deprez157378f2022-04-04 15:47:50 +0200808 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000809 return arch_atomic_inc_unless_negative(v);
810}
811#define atomic_inc_unless_negative atomic_inc_unless_negative
812#endif
813
814#if defined(arch_atomic_dec_unless_positive)
Olivier Deprez157378f2022-04-04 15:47:50 +0200815static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +0000816atomic_dec_unless_positive(atomic_t *v)
817{
Olivier Deprez157378f2022-04-04 15:47:50 +0200818 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000819 return arch_atomic_dec_unless_positive(v);
820}
821#define atomic_dec_unless_positive atomic_dec_unless_positive
822#endif
823
824#if defined(arch_atomic_dec_if_positive)
Olivier Deprez157378f2022-04-04 15:47:50 +0200825static __always_inline int
David Brazdil0f672f62019-12-10 10:32:29 +0000826atomic_dec_if_positive(atomic_t *v)
827{
Olivier Deprez157378f2022-04-04 15:47:50 +0200828 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000829 return arch_atomic_dec_if_positive(v);
830}
831#define atomic_dec_if_positive atomic_dec_if_positive
832#endif
833
Olivier Deprez157378f2022-04-04 15:47:50 +0200834static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000835atomic64_read(const atomic64_t *v)
836{
Olivier Deprez157378f2022-04-04 15:47:50 +0200837 instrument_atomic_read(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000838 return arch_atomic64_read(v);
839}
840#define atomic64_read atomic64_read
841
842#if defined(arch_atomic64_read_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200843static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000844atomic64_read_acquire(const atomic64_t *v)
845{
Olivier Deprez157378f2022-04-04 15:47:50 +0200846 instrument_atomic_read(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000847 return arch_atomic64_read_acquire(v);
848}
849#define atomic64_read_acquire atomic64_read_acquire
850#endif
851
Olivier Deprez157378f2022-04-04 15:47:50 +0200852static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000853atomic64_set(atomic64_t *v, s64 i)
854{
Olivier Deprez157378f2022-04-04 15:47:50 +0200855 instrument_atomic_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000856 arch_atomic64_set(v, i);
857}
858#define atomic64_set atomic64_set
859
860#if defined(arch_atomic64_set_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200861static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000862atomic64_set_release(atomic64_t *v, s64 i)
863{
Olivier Deprez157378f2022-04-04 15:47:50 +0200864 instrument_atomic_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000865 arch_atomic64_set_release(v, i);
866}
867#define atomic64_set_release atomic64_set_release
868#endif
869
Olivier Deprez157378f2022-04-04 15:47:50 +0200870static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000871atomic64_add(s64 i, atomic64_t *v)
872{
Olivier Deprez157378f2022-04-04 15:47:50 +0200873 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000874 arch_atomic64_add(i, v);
875}
876#define atomic64_add atomic64_add
877
878#if !defined(arch_atomic64_add_return_relaxed) || defined(arch_atomic64_add_return)
Olivier Deprez157378f2022-04-04 15:47:50 +0200879static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000880atomic64_add_return(s64 i, atomic64_t *v)
881{
Olivier Deprez157378f2022-04-04 15:47:50 +0200882 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000883 return arch_atomic64_add_return(i, v);
884}
885#define atomic64_add_return atomic64_add_return
886#endif
887
888#if defined(arch_atomic64_add_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200889static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000890atomic64_add_return_acquire(s64 i, atomic64_t *v)
891{
Olivier Deprez157378f2022-04-04 15:47:50 +0200892 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000893 return arch_atomic64_add_return_acquire(i, v);
894}
895#define atomic64_add_return_acquire atomic64_add_return_acquire
896#endif
897
898#if defined(arch_atomic64_add_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200899static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000900atomic64_add_return_release(s64 i, atomic64_t *v)
901{
Olivier Deprez157378f2022-04-04 15:47:50 +0200902 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000903 return arch_atomic64_add_return_release(i, v);
904}
905#define atomic64_add_return_release atomic64_add_return_release
906#endif
907
908#if defined(arch_atomic64_add_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200909static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000910atomic64_add_return_relaxed(s64 i, atomic64_t *v)
911{
Olivier Deprez157378f2022-04-04 15:47:50 +0200912 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000913 return arch_atomic64_add_return_relaxed(i, v);
914}
915#define atomic64_add_return_relaxed atomic64_add_return_relaxed
916#endif
917
918#if !defined(arch_atomic64_fetch_add_relaxed) || defined(arch_atomic64_fetch_add)
Olivier Deprez157378f2022-04-04 15:47:50 +0200919static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000920atomic64_fetch_add(s64 i, atomic64_t *v)
921{
Olivier Deprez157378f2022-04-04 15:47:50 +0200922 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000923 return arch_atomic64_fetch_add(i, v);
924}
925#define atomic64_fetch_add atomic64_fetch_add
926#endif
927
928#if defined(arch_atomic64_fetch_add_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200929static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000930atomic64_fetch_add_acquire(s64 i, atomic64_t *v)
931{
Olivier Deprez157378f2022-04-04 15:47:50 +0200932 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000933 return arch_atomic64_fetch_add_acquire(i, v);
934}
935#define atomic64_fetch_add_acquire atomic64_fetch_add_acquire
936#endif
937
938#if defined(arch_atomic64_fetch_add_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200939static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000940atomic64_fetch_add_release(s64 i, atomic64_t *v)
941{
Olivier Deprez157378f2022-04-04 15:47:50 +0200942 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000943 return arch_atomic64_fetch_add_release(i, v);
944}
945#define atomic64_fetch_add_release atomic64_fetch_add_release
946#endif
947
948#if defined(arch_atomic64_fetch_add_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200949static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000950atomic64_fetch_add_relaxed(s64 i, atomic64_t *v)
951{
Olivier Deprez157378f2022-04-04 15:47:50 +0200952 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000953 return arch_atomic64_fetch_add_relaxed(i, v);
954}
955#define atomic64_fetch_add_relaxed atomic64_fetch_add_relaxed
956#endif
957
Olivier Deprez157378f2022-04-04 15:47:50 +0200958static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +0000959atomic64_sub(s64 i, atomic64_t *v)
960{
Olivier Deprez157378f2022-04-04 15:47:50 +0200961 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000962 arch_atomic64_sub(i, v);
963}
964#define atomic64_sub atomic64_sub
965
966#if !defined(arch_atomic64_sub_return_relaxed) || defined(arch_atomic64_sub_return)
Olivier Deprez157378f2022-04-04 15:47:50 +0200967static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000968atomic64_sub_return(s64 i, atomic64_t *v)
969{
Olivier Deprez157378f2022-04-04 15:47:50 +0200970 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000971 return arch_atomic64_sub_return(i, v);
972}
973#define atomic64_sub_return atomic64_sub_return
974#endif
975
976#if defined(arch_atomic64_sub_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +0200977static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000978atomic64_sub_return_acquire(s64 i, atomic64_t *v)
979{
Olivier Deprez157378f2022-04-04 15:47:50 +0200980 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000981 return arch_atomic64_sub_return_acquire(i, v);
982}
983#define atomic64_sub_return_acquire atomic64_sub_return_acquire
984#endif
985
986#if defined(arch_atomic64_sub_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +0200987static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000988atomic64_sub_return_release(s64 i, atomic64_t *v)
989{
Olivier Deprez157378f2022-04-04 15:47:50 +0200990 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +0000991 return arch_atomic64_sub_return_release(i, v);
992}
993#define atomic64_sub_return_release atomic64_sub_return_release
994#endif
995
996#if defined(arch_atomic64_sub_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +0200997static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +0000998atomic64_sub_return_relaxed(s64 i, atomic64_t *v)
999{
Olivier Deprez157378f2022-04-04 15:47:50 +02001000 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001001 return arch_atomic64_sub_return_relaxed(i, v);
1002}
1003#define atomic64_sub_return_relaxed atomic64_sub_return_relaxed
1004#endif
1005
1006#if !defined(arch_atomic64_fetch_sub_relaxed) || defined(arch_atomic64_fetch_sub)
Olivier Deprez157378f2022-04-04 15:47:50 +02001007static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001008atomic64_fetch_sub(s64 i, atomic64_t *v)
1009{
Olivier Deprez157378f2022-04-04 15:47:50 +02001010 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001011 return arch_atomic64_fetch_sub(i, v);
1012}
1013#define atomic64_fetch_sub atomic64_fetch_sub
1014#endif
1015
1016#if defined(arch_atomic64_fetch_sub_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001017static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001018atomic64_fetch_sub_acquire(s64 i, atomic64_t *v)
1019{
Olivier Deprez157378f2022-04-04 15:47:50 +02001020 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001021 return arch_atomic64_fetch_sub_acquire(i, v);
1022}
1023#define atomic64_fetch_sub_acquire atomic64_fetch_sub_acquire
1024#endif
1025
1026#if defined(arch_atomic64_fetch_sub_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001027static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001028atomic64_fetch_sub_release(s64 i, atomic64_t *v)
1029{
Olivier Deprez157378f2022-04-04 15:47:50 +02001030 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001031 return arch_atomic64_fetch_sub_release(i, v);
1032}
1033#define atomic64_fetch_sub_release atomic64_fetch_sub_release
1034#endif
1035
1036#if defined(arch_atomic64_fetch_sub_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001037static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001038atomic64_fetch_sub_relaxed(s64 i, atomic64_t *v)
1039{
Olivier Deprez157378f2022-04-04 15:47:50 +02001040 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001041 return arch_atomic64_fetch_sub_relaxed(i, v);
1042}
1043#define atomic64_fetch_sub_relaxed atomic64_fetch_sub_relaxed
1044#endif
1045
1046#if defined(arch_atomic64_inc)
Olivier Deprez157378f2022-04-04 15:47:50 +02001047static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +00001048atomic64_inc(atomic64_t *v)
1049{
Olivier Deprez157378f2022-04-04 15:47:50 +02001050 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001051 arch_atomic64_inc(v);
1052}
1053#define atomic64_inc atomic64_inc
1054#endif
1055
1056#if defined(arch_atomic64_inc_return)
Olivier Deprez157378f2022-04-04 15:47:50 +02001057static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001058atomic64_inc_return(atomic64_t *v)
1059{
Olivier Deprez157378f2022-04-04 15:47:50 +02001060 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001061 return arch_atomic64_inc_return(v);
1062}
1063#define atomic64_inc_return atomic64_inc_return
1064#endif
1065
1066#if defined(arch_atomic64_inc_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001067static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001068atomic64_inc_return_acquire(atomic64_t *v)
1069{
Olivier Deprez157378f2022-04-04 15:47:50 +02001070 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001071 return arch_atomic64_inc_return_acquire(v);
1072}
1073#define atomic64_inc_return_acquire atomic64_inc_return_acquire
1074#endif
1075
1076#if defined(arch_atomic64_inc_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001077static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001078atomic64_inc_return_release(atomic64_t *v)
1079{
Olivier Deprez157378f2022-04-04 15:47:50 +02001080 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001081 return arch_atomic64_inc_return_release(v);
1082}
1083#define atomic64_inc_return_release atomic64_inc_return_release
1084#endif
1085
1086#if defined(arch_atomic64_inc_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001087static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001088atomic64_inc_return_relaxed(atomic64_t *v)
1089{
Olivier Deprez157378f2022-04-04 15:47:50 +02001090 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001091 return arch_atomic64_inc_return_relaxed(v);
1092}
1093#define atomic64_inc_return_relaxed atomic64_inc_return_relaxed
1094#endif
1095
1096#if defined(arch_atomic64_fetch_inc)
Olivier Deprez157378f2022-04-04 15:47:50 +02001097static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001098atomic64_fetch_inc(atomic64_t *v)
1099{
Olivier Deprez157378f2022-04-04 15:47:50 +02001100 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001101 return arch_atomic64_fetch_inc(v);
1102}
1103#define atomic64_fetch_inc atomic64_fetch_inc
1104#endif
1105
1106#if defined(arch_atomic64_fetch_inc_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001107static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001108atomic64_fetch_inc_acquire(atomic64_t *v)
1109{
Olivier Deprez157378f2022-04-04 15:47:50 +02001110 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001111 return arch_atomic64_fetch_inc_acquire(v);
1112}
1113#define atomic64_fetch_inc_acquire atomic64_fetch_inc_acquire
1114#endif
1115
1116#if defined(arch_atomic64_fetch_inc_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001117static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001118atomic64_fetch_inc_release(atomic64_t *v)
1119{
Olivier Deprez157378f2022-04-04 15:47:50 +02001120 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001121 return arch_atomic64_fetch_inc_release(v);
1122}
1123#define atomic64_fetch_inc_release atomic64_fetch_inc_release
1124#endif
1125
1126#if defined(arch_atomic64_fetch_inc_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001127static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001128atomic64_fetch_inc_relaxed(atomic64_t *v)
1129{
Olivier Deprez157378f2022-04-04 15:47:50 +02001130 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001131 return arch_atomic64_fetch_inc_relaxed(v);
1132}
1133#define atomic64_fetch_inc_relaxed atomic64_fetch_inc_relaxed
1134#endif
1135
1136#if defined(arch_atomic64_dec)
Olivier Deprez157378f2022-04-04 15:47:50 +02001137static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +00001138atomic64_dec(atomic64_t *v)
1139{
Olivier Deprez157378f2022-04-04 15:47:50 +02001140 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001141 arch_atomic64_dec(v);
1142}
1143#define atomic64_dec atomic64_dec
1144#endif
1145
1146#if defined(arch_atomic64_dec_return)
Olivier Deprez157378f2022-04-04 15:47:50 +02001147static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001148atomic64_dec_return(atomic64_t *v)
1149{
Olivier Deprez157378f2022-04-04 15:47:50 +02001150 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001151 return arch_atomic64_dec_return(v);
1152}
1153#define atomic64_dec_return atomic64_dec_return
1154#endif
1155
1156#if defined(arch_atomic64_dec_return_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001157static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001158atomic64_dec_return_acquire(atomic64_t *v)
1159{
Olivier Deprez157378f2022-04-04 15:47:50 +02001160 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001161 return arch_atomic64_dec_return_acquire(v);
1162}
1163#define atomic64_dec_return_acquire atomic64_dec_return_acquire
1164#endif
1165
1166#if defined(arch_atomic64_dec_return_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001167static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001168atomic64_dec_return_release(atomic64_t *v)
1169{
Olivier Deprez157378f2022-04-04 15:47:50 +02001170 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001171 return arch_atomic64_dec_return_release(v);
1172}
1173#define atomic64_dec_return_release atomic64_dec_return_release
1174#endif
1175
1176#if defined(arch_atomic64_dec_return_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001177static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001178atomic64_dec_return_relaxed(atomic64_t *v)
1179{
Olivier Deprez157378f2022-04-04 15:47:50 +02001180 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001181 return arch_atomic64_dec_return_relaxed(v);
1182}
1183#define atomic64_dec_return_relaxed atomic64_dec_return_relaxed
1184#endif
1185
1186#if defined(arch_atomic64_fetch_dec)
Olivier Deprez157378f2022-04-04 15:47:50 +02001187static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001188atomic64_fetch_dec(atomic64_t *v)
1189{
Olivier Deprez157378f2022-04-04 15:47:50 +02001190 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001191 return arch_atomic64_fetch_dec(v);
1192}
1193#define atomic64_fetch_dec atomic64_fetch_dec
1194#endif
1195
1196#if defined(arch_atomic64_fetch_dec_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001197static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001198atomic64_fetch_dec_acquire(atomic64_t *v)
1199{
Olivier Deprez157378f2022-04-04 15:47:50 +02001200 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001201 return arch_atomic64_fetch_dec_acquire(v);
1202}
1203#define atomic64_fetch_dec_acquire atomic64_fetch_dec_acquire
1204#endif
1205
1206#if defined(arch_atomic64_fetch_dec_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001207static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001208atomic64_fetch_dec_release(atomic64_t *v)
1209{
Olivier Deprez157378f2022-04-04 15:47:50 +02001210 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001211 return arch_atomic64_fetch_dec_release(v);
1212}
1213#define atomic64_fetch_dec_release atomic64_fetch_dec_release
1214#endif
1215
1216#if defined(arch_atomic64_fetch_dec_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001217static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001218atomic64_fetch_dec_relaxed(atomic64_t *v)
1219{
Olivier Deprez157378f2022-04-04 15:47:50 +02001220 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001221 return arch_atomic64_fetch_dec_relaxed(v);
1222}
1223#define atomic64_fetch_dec_relaxed atomic64_fetch_dec_relaxed
1224#endif
1225
Olivier Deprez157378f2022-04-04 15:47:50 +02001226static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +00001227atomic64_and(s64 i, atomic64_t *v)
1228{
Olivier Deprez157378f2022-04-04 15:47:50 +02001229 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001230 arch_atomic64_and(i, v);
1231}
1232#define atomic64_and atomic64_and
1233
1234#if !defined(arch_atomic64_fetch_and_relaxed) || defined(arch_atomic64_fetch_and)
Olivier Deprez157378f2022-04-04 15:47:50 +02001235static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001236atomic64_fetch_and(s64 i, atomic64_t *v)
1237{
Olivier Deprez157378f2022-04-04 15:47:50 +02001238 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001239 return arch_atomic64_fetch_and(i, v);
1240}
1241#define atomic64_fetch_and atomic64_fetch_and
1242#endif
1243
1244#if defined(arch_atomic64_fetch_and_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001245static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001246atomic64_fetch_and_acquire(s64 i, atomic64_t *v)
1247{
Olivier Deprez157378f2022-04-04 15:47:50 +02001248 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001249 return arch_atomic64_fetch_and_acquire(i, v);
1250}
1251#define atomic64_fetch_and_acquire atomic64_fetch_and_acquire
1252#endif
1253
1254#if defined(arch_atomic64_fetch_and_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001255static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001256atomic64_fetch_and_release(s64 i, atomic64_t *v)
1257{
Olivier Deprez157378f2022-04-04 15:47:50 +02001258 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001259 return arch_atomic64_fetch_and_release(i, v);
1260}
1261#define atomic64_fetch_and_release atomic64_fetch_and_release
1262#endif
1263
1264#if defined(arch_atomic64_fetch_and_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001265static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001266atomic64_fetch_and_relaxed(s64 i, atomic64_t *v)
1267{
Olivier Deprez157378f2022-04-04 15:47:50 +02001268 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001269 return arch_atomic64_fetch_and_relaxed(i, v);
1270}
1271#define atomic64_fetch_and_relaxed atomic64_fetch_and_relaxed
1272#endif
1273
1274#if defined(arch_atomic64_andnot)
Olivier Deprez157378f2022-04-04 15:47:50 +02001275static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +00001276atomic64_andnot(s64 i, atomic64_t *v)
1277{
Olivier Deprez157378f2022-04-04 15:47:50 +02001278 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001279 arch_atomic64_andnot(i, v);
1280}
1281#define atomic64_andnot atomic64_andnot
1282#endif
1283
1284#if defined(arch_atomic64_fetch_andnot)
Olivier Deprez157378f2022-04-04 15:47:50 +02001285static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001286atomic64_fetch_andnot(s64 i, atomic64_t *v)
1287{
Olivier Deprez157378f2022-04-04 15:47:50 +02001288 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001289 return arch_atomic64_fetch_andnot(i, v);
1290}
1291#define atomic64_fetch_andnot atomic64_fetch_andnot
1292#endif
1293
1294#if defined(arch_atomic64_fetch_andnot_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001295static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001296atomic64_fetch_andnot_acquire(s64 i, atomic64_t *v)
1297{
Olivier Deprez157378f2022-04-04 15:47:50 +02001298 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001299 return arch_atomic64_fetch_andnot_acquire(i, v);
1300}
1301#define atomic64_fetch_andnot_acquire atomic64_fetch_andnot_acquire
1302#endif
1303
1304#if defined(arch_atomic64_fetch_andnot_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001305static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001306atomic64_fetch_andnot_release(s64 i, atomic64_t *v)
1307{
Olivier Deprez157378f2022-04-04 15:47:50 +02001308 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001309 return arch_atomic64_fetch_andnot_release(i, v);
1310}
1311#define atomic64_fetch_andnot_release atomic64_fetch_andnot_release
1312#endif
1313
1314#if defined(arch_atomic64_fetch_andnot_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001315static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001316atomic64_fetch_andnot_relaxed(s64 i, atomic64_t *v)
1317{
Olivier Deprez157378f2022-04-04 15:47:50 +02001318 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001319 return arch_atomic64_fetch_andnot_relaxed(i, v);
1320}
1321#define atomic64_fetch_andnot_relaxed atomic64_fetch_andnot_relaxed
1322#endif
1323
Olivier Deprez157378f2022-04-04 15:47:50 +02001324static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +00001325atomic64_or(s64 i, atomic64_t *v)
1326{
Olivier Deprez157378f2022-04-04 15:47:50 +02001327 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001328 arch_atomic64_or(i, v);
1329}
1330#define atomic64_or atomic64_or
1331
1332#if !defined(arch_atomic64_fetch_or_relaxed) || defined(arch_atomic64_fetch_or)
Olivier Deprez157378f2022-04-04 15:47:50 +02001333static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001334atomic64_fetch_or(s64 i, atomic64_t *v)
1335{
Olivier Deprez157378f2022-04-04 15:47:50 +02001336 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001337 return arch_atomic64_fetch_or(i, v);
1338}
1339#define atomic64_fetch_or atomic64_fetch_or
1340#endif
1341
1342#if defined(arch_atomic64_fetch_or_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001343static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001344atomic64_fetch_or_acquire(s64 i, atomic64_t *v)
1345{
Olivier Deprez157378f2022-04-04 15:47:50 +02001346 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001347 return arch_atomic64_fetch_or_acquire(i, v);
1348}
1349#define atomic64_fetch_or_acquire atomic64_fetch_or_acquire
1350#endif
1351
1352#if defined(arch_atomic64_fetch_or_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001353static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001354atomic64_fetch_or_release(s64 i, atomic64_t *v)
1355{
Olivier Deprez157378f2022-04-04 15:47:50 +02001356 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001357 return arch_atomic64_fetch_or_release(i, v);
1358}
1359#define atomic64_fetch_or_release atomic64_fetch_or_release
1360#endif
1361
1362#if defined(arch_atomic64_fetch_or_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001363static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001364atomic64_fetch_or_relaxed(s64 i, atomic64_t *v)
1365{
Olivier Deprez157378f2022-04-04 15:47:50 +02001366 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001367 return arch_atomic64_fetch_or_relaxed(i, v);
1368}
1369#define atomic64_fetch_or_relaxed atomic64_fetch_or_relaxed
1370#endif
1371
Olivier Deprez157378f2022-04-04 15:47:50 +02001372static __always_inline void
David Brazdil0f672f62019-12-10 10:32:29 +00001373atomic64_xor(s64 i, atomic64_t *v)
1374{
Olivier Deprez157378f2022-04-04 15:47:50 +02001375 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001376 arch_atomic64_xor(i, v);
1377}
1378#define atomic64_xor atomic64_xor
1379
1380#if !defined(arch_atomic64_fetch_xor_relaxed) || defined(arch_atomic64_fetch_xor)
Olivier Deprez157378f2022-04-04 15:47:50 +02001381static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001382atomic64_fetch_xor(s64 i, atomic64_t *v)
1383{
Olivier Deprez157378f2022-04-04 15:47:50 +02001384 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001385 return arch_atomic64_fetch_xor(i, v);
1386}
1387#define atomic64_fetch_xor atomic64_fetch_xor
1388#endif
1389
1390#if defined(arch_atomic64_fetch_xor_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001391static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001392atomic64_fetch_xor_acquire(s64 i, atomic64_t *v)
1393{
Olivier Deprez157378f2022-04-04 15:47:50 +02001394 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001395 return arch_atomic64_fetch_xor_acquire(i, v);
1396}
1397#define atomic64_fetch_xor_acquire atomic64_fetch_xor_acquire
1398#endif
1399
1400#if defined(arch_atomic64_fetch_xor_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001401static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001402atomic64_fetch_xor_release(s64 i, atomic64_t *v)
1403{
Olivier Deprez157378f2022-04-04 15:47:50 +02001404 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001405 return arch_atomic64_fetch_xor_release(i, v);
1406}
1407#define atomic64_fetch_xor_release atomic64_fetch_xor_release
1408#endif
1409
1410#if defined(arch_atomic64_fetch_xor_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001411static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001412atomic64_fetch_xor_relaxed(s64 i, atomic64_t *v)
1413{
Olivier Deprez157378f2022-04-04 15:47:50 +02001414 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001415 return arch_atomic64_fetch_xor_relaxed(i, v);
1416}
1417#define atomic64_fetch_xor_relaxed atomic64_fetch_xor_relaxed
1418#endif
1419
1420#if !defined(arch_atomic64_xchg_relaxed) || defined(arch_atomic64_xchg)
Olivier Deprez157378f2022-04-04 15:47:50 +02001421static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001422atomic64_xchg(atomic64_t *v, s64 i)
1423{
Olivier Deprez157378f2022-04-04 15:47:50 +02001424 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001425 return arch_atomic64_xchg(v, i);
1426}
1427#define atomic64_xchg atomic64_xchg
1428#endif
1429
1430#if defined(arch_atomic64_xchg_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001431static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001432atomic64_xchg_acquire(atomic64_t *v, s64 i)
1433{
Olivier Deprez157378f2022-04-04 15:47:50 +02001434 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001435 return arch_atomic64_xchg_acquire(v, i);
1436}
1437#define atomic64_xchg_acquire atomic64_xchg_acquire
1438#endif
1439
1440#if defined(arch_atomic64_xchg_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001441static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001442atomic64_xchg_release(atomic64_t *v, s64 i)
1443{
Olivier Deprez157378f2022-04-04 15:47:50 +02001444 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001445 return arch_atomic64_xchg_release(v, i);
1446}
1447#define atomic64_xchg_release atomic64_xchg_release
1448#endif
1449
1450#if defined(arch_atomic64_xchg_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001451static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001452atomic64_xchg_relaxed(atomic64_t *v, s64 i)
1453{
Olivier Deprez157378f2022-04-04 15:47:50 +02001454 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001455 return arch_atomic64_xchg_relaxed(v, i);
1456}
1457#define atomic64_xchg_relaxed atomic64_xchg_relaxed
1458#endif
1459
1460#if !defined(arch_atomic64_cmpxchg_relaxed) || defined(arch_atomic64_cmpxchg)
Olivier Deprez157378f2022-04-04 15:47:50 +02001461static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001462atomic64_cmpxchg(atomic64_t *v, s64 old, s64 new)
1463{
Olivier Deprez157378f2022-04-04 15:47:50 +02001464 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001465 return arch_atomic64_cmpxchg(v, old, new);
1466}
1467#define atomic64_cmpxchg atomic64_cmpxchg
1468#endif
1469
1470#if defined(arch_atomic64_cmpxchg_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001471static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001472atomic64_cmpxchg_acquire(atomic64_t *v, s64 old, s64 new)
1473{
Olivier Deprez157378f2022-04-04 15:47:50 +02001474 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001475 return arch_atomic64_cmpxchg_acquire(v, old, new);
1476}
1477#define atomic64_cmpxchg_acquire atomic64_cmpxchg_acquire
1478#endif
1479
1480#if defined(arch_atomic64_cmpxchg_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001481static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001482atomic64_cmpxchg_release(atomic64_t *v, s64 old, s64 new)
1483{
Olivier Deprez157378f2022-04-04 15:47:50 +02001484 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001485 return arch_atomic64_cmpxchg_release(v, old, new);
1486}
1487#define atomic64_cmpxchg_release atomic64_cmpxchg_release
1488#endif
1489
1490#if defined(arch_atomic64_cmpxchg_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001491static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001492atomic64_cmpxchg_relaxed(atomic64_t *v, s64 old, s64 new)
1493{
Olivier Deprez157378f2022-04-04 15:47:50 +02001494 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001495 return arch_atomic64_cmpxchg_relaxed(v, old, new);
1496}
1497#define atomic64_cmpxchg_relaxed atomic64_cmpxchg_relaxed
1498#endif
1499
1500#if defined(arch_atomic64_try_cmpxchg)
Olivier Deprez157378f2022-04-04 15:47:50 +02001501static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001502atomic64_try_cmpxchg(atomic64_t *v, s64 *old, s64 new)
1503{
Olivier Deprez157378f2022-04-04 15:47:50 +02001504 instrument_atomic_read_write(v, sizeof(*v));
1505 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +00001506 return arch_atomic64_try_cmpxchg(v, old, new);
1507}
1508#define atomic64_try_cmpxchg atomic64_try_cmpxchg
1509#endif
1510
1511#if defined(arch_atomic64_try_cmpxchg_acquire)
Olivier Deprez157378f2022-04-04 15:47:50 +02001512static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001513atomic64_try_cmpxchg_acquire(atomic64_t *v, s64 *old, s64 new)
1514{
Olivier Deprez157378f2022-04-04 15:47:50 +02001515 instrument_atomic_read_write(v, sizeof(*v));
1516 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +00001517 return arch_atomic64_try_cmpxchg_acquire(v, old, new);
1518}
1519#define atomic64_try_cmpxchg_acquire atomic64_try_cmpxchg_acquire
1520#endif
1521
1522#if defined(arch_atomic64_try_cmpxchg_release)
Olivier Deprez157378f2022-04-04 15:47:50 +02001523static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001524atomic64_try_cmpxchg_release(atomic64_t *v, s64 *old, s64 new)
1525{
Olivier Deprez157378f2022-04-04 15:47:50 +02001526 instrument_atomic_read_write(v, sizeof(*v));
1527 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +00001528 return arch_atomic64_try_cmpxchg_release(v, old, new);
1529}
1530#define atomic64_try_cmpxchg_release atomic64_try_cmpxchg_release
1531#endif
1532
1533#if defined(arch_atomic64_try_cmpxchg_relaxed)
Olivier Deprez157378f2022-04-04 15:47:50 +02001534static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001535atomic64_try_cmpxchg_relaxed(atomic64_t *v, s64 *old, s64 new)
1536{
Olivier Deprez157378f2022-04-04 15:47:50 +02001537 instrument_atomic_read_write(v, sizeof(*v));
1538 instrument_atomic_read_write(old, sizeof(*old));
David Brazdil0f672f62019-12-10 10:32:29 +00001539 return arch_atomic64_try_cmpxchg_relaxed(v, old, new);
1540}
1541#define atomic64_try_cmpxchg_relaxed atomic64_try_cmpxchg_relaxed
1542#endif
1543
1544#if defined(arch_atomic64_sub_and_test)
Olivier Deprez157378f2022-04-04 15:47:50 +02001545static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001546atomic64_sub_and_test(s64 i, atomic64_t *v)
1547{
Olivier Deprez157378f2022-04-04 15:47:50 +02001548 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001549 return arch_atomic64_sub_and_test(i, v);
1550}
1551#define atomic64_sub_and_test atomic64_sub_and_test
1552#endif
1553
1554#if defined(arch_atomic64_dec_and_test)
Olivier Deprez157378f2022-04-04 15:47:50 +02001555static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001556atomic64_dec_and_test(atomic64_t *v)
1557{
Olivier Deprez157378f2022-04-04 15:47:50 +02001558 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001559 return arch_atomic64_dec_and_test(v);
1560}
1561#define atomic64_dec_and_test atomic64_dec_and_test
1562#endif
1563
1564#if defined(arch_atomic64_inc_and_test)
Olivier Deprez157378f2022-04-04 15:47:50 +02001565static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001566atomic64_inc_and_test(atomic64_t *v)
1567{
Olivier Deprez157378f2022-04-04 15:47:50 +02001568 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001569 return arch_atomic64_inc_and_test(v);
1570}
1571#define atomic64_inc_and_test atomic64_inc_and_test
1572#endif
1573
1574#if defined(arch_atomic64_add_negative)
Olivier Deprez157378f2022-04-04 15:47:50 +02001575static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001576atomic64_add_negative(s64 i, atomic64_t *v)
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001577{
Olivier Deprez157378f2022-04-04 15:47:50 +02001578 instrument_atomic_read_write(v, sizeof(*v));
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001579 return arch_atomic64_add_negative(i, v);
1580}
David Brazdil0f672f62019-12-10 10:32:29 +00001581#define atomic64_add_negative atomic64_add_negative
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001582#endif
1583
David Brazdil0f672f62019-12-10 10:32:29 +00001584#if defined(arch_atomic64_fetch_add_unless)
Olivier Deprez157378f2022-04-04 15:47:50 +02001585static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001586atomic64_fetch_add_unless(atomic64_t *v, s64 a, s64 u)
1587{
Olivier Deprez157378f2022-04-04 15:47:50 +02001588 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001589 return arch_atomic64_fetch_add_unless(v, a, u);
1590}
1591#define atomic64_fetch_add_unless atomic64_fetch_add_unless
1592#endif
1593
1594#if defined(arch_atomic64_add_unless)
Olivier Deprez157378f2022-04-04 15:47:50 +02001595static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001596atomic64_add_unless(atomic64_t *v, s64 a, s64 u)
1597{
Olivier Deprez157378f2022-04-04 15:47:50 +02001598 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001599 return arch_atomic64_add_unless(v, a, u);
1600}
1601#define atomic64_add_unless atomic64_add_unless
1602#endif
1603
1604#if defined(arch_atomic64_inc_not_zero)
Olivier Deprez157378f2022-04-04 15:47:50 +02001605static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001606atomic64_inc_not_zero(atomic64_t *v)
1607{
Olivier Deprez157378f2022-04-04 15:47:50 +02001608 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001609 return arch_atomic64_inc_not_zero(v);
1610}
1611#define atomic64_inc_not_zero atomic64_inc_not_zero
1612#endif
1613
1614#if defined(arch_atomic64_inc_unless_negative)
Olivier Deprez157378f2022-04-04 15:47:50 +02001615static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001616atomic64_inc_unless_negative(atomic64_t *v)
1617{
Olivier Deprez157378f2022-04-04 15:47:50 +02001618 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001619 return arch_atomic64_inc_unless_negative(v);
1620}
1621#define atomic64_inc_unless_negative atomic64_inc_unless_negative
1622#endif
1623
1624#if defined(arch_atomic64_dec_unless_positive)
Olivier Deprez157378f2022-04-04 15:47:50 +02001625static __always_inline bool
David Brazdil0f672f62019-12-10 10:32:29 +00001626atomic64_dec_unless_positive(atomic64_t *v)
1627{
Olivier Deprez157378f2022-04-04 15:47:50 +02001628 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001629 return arch_atomic64_dec_unless_positive(v);
1630}
1631#define atomic64_dec_unless_positive atomic64_dec_unless_positive
1632#endif
1633
1634#if defined(arch_atomic64_dec_if_positive)
Olivier Deprez157378f2022-04-04 15:47:50 +02001635static __always_inline s64
David Brazdil0f672f62019-12-10 10:32:29 +00001636atomic64_dec_if_positive(atomic64_t *v)
1637{
Olivier Deprez157378f2022-04-04 15:47:50 +02001638 instrument_atomic_read_write(v, sizeof(*v));
David Brazdil0f672f62019-12-10 10:32:29 +00001639 return arch_atomic64_dec_if_positive(v);
1640}
1641#define atomic64_dec_if_positive atomic64_dec_if_positive
1642#endif
1643
1644#if !defined(arch_xchg_relaxed) || defined(arch_xchg)
1645#define xchg(ptr, ...) \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001646({ \
1647 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001648 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001649 arch_xchg(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001650})
David Brazdil0f672f62019-12-10 10:32:29 +00001651#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001652
David Brazdil0f672f62019-12-10 10:32:29 +00001653#if defined(arch_xchg_acquire)
1654#define xchg_acquire(ptr, ...) \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001655({ \
1656 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001657 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001658 arch_xchg_acquire(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001659})
David Brazdil0f672f62019-12-10 10:32:29 +00001660#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001661
David Brazdil0f672f62019-12-10 10:32:29 +00001662#if defined(arch_xchg_release)
1663#define xchg_release(ptr, ...) \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001664({ \
1665 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001666 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001667 arch_xchg_release(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001668})
David Brazdil0f672f62019-12-10 10:32:29 +00001669#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001670
David Brazdil0f672f62019-12-10 10:32:29 +00001671#if defined(arch_xchg_relaxed)
1672#define xchg_relaxed(ptr, ...) \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001673({ \
1674 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001675 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001676 arch_xchg_relaxed(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001677})
David Brazdil0f672f62019-12-10 10:32:29 +00001678#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001679
David Brazdil0f672f62019-12-10 10:32:29 +00001680#if !defined(arch_cmpxchg_relaxed) || defined(arch_cmpxchg)
1681#define cmpxchg(ptr, ...) \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001682({ \
1683 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001684 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001685 arch_cmpxchg(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001686})
David Brazdil0f672f62019-12-10 10:32:29 +00001687#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001688
David Brazdil0f672f62019-12-10 10:32:29 +00001689#if defined(arch_cmpxchg_acquire)
1690#define cmpxchg_acquire(ptr, ...) \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001691({ \
1692 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001693 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001694 arch_cmpxchg_acquire(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001695})
David Brazdil0f672f62019-12-10 10:32:29 +00001696#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001697
David Brazdil0f672f62019-12-10 10:32:29 +00001698#if defined(arch_cmpxchg_release)
1699#define cmpxchg_release(ptr, ...) \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001700({ \
David Brazdil0f672f62019-12-10 10:32:29 +00001701 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001702 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001703 arch_cmpxchg_release(__ai_ptr, __VA_ARGS__); \
1704})
1705#endif
1706
1707#if defined(arch_cmpxchg_relaxed)
1708#define cmpxchg_relaxed(ptr, ...) \
1709({ \
1710 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001711 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001712 arch_cmpxchg_relaxed(__ai_ptr, __VA_ARGS__); \
1713})
1714#endif
1715
1716#if !defined(arch_cmpxchg64_relaxed) || defined(arch_cmpxchg64)
1717#define cmpxchg64(ptr, ...) \
1718({ \
1719 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001720 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001721 arch_cmpxchg64(__ai_ptr, __VA_ARGS__); \
1722})
1723#endif
1724
1725#if defined(arch_cmpxchg64_acquire)
1726#define cmpxchg64_acquire(ptr, ...) \
1727({ \
1728 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001729 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001730 arch_cmpxchg64_acquire(__ai_ptr, __VA_ARGS__); \
1731})
1732#endif
1733
1734#if defined(arch_cmpxchg64_release)
1735#define cmpxchg64_release(ptr, ...) \
1736({ \
1737 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001738 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001739 arch_cmpxchg64_release(__ai_ptr, __VA_ARGS__); \
1740})
1741#endif
1742
1743#if defined(arch_cmpxchg64_relaxed)
1744#define cmpxchg64_relaxed(ptr, ...) \
1745({ \
1746 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001747 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001748 arch_cmpxchg64_relaxed(__ai_ptr, __VA_ARGS__); \
1749})
1750#endif
1751
1752#define cmpxchg_local(ptr, ...) \
1753({ \
1754 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001755 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001756 arch_cmpxchg_local(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001757})
1758
David Brazdil0f672f62019-12-10 10:32:29 +00001759#define cmpxchg64_local(ptr, ...) \
1760({ \
1761 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001762 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001763 arch_cmpxchg64_local(__ai_ptr, __VA_ARGS__); \
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001764})
1765
David Brazdil0f672f62019-12-10 10:32:29 +00001766#define sync_cmpxchg(ptr, ...) \
1767({ \
1768 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001769 instrument_atomic_write(__ai_ptr, sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001770 arch_sync_cmpxchg(__ai_ptr, __VA_ARGS__); \
1771})
1772
1773#define cmpxchg_double(ptr, ...) \
1774({ \
1775 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001776 instrument_atomic_write(__ai_ptr, 2 * sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001777 arch_cmpxchg_double(__ai_ptr, __VA_ARGS__); \
1778})
1779
1780
1781#define cmpxchg_double_local(ptr, ...) \
1782({ \
1783 typeof(ptr) __ai_ptr = (ptr); \
Olivier Deprez157378f2022-04-04 15:47:50 +02001784 instrument_atomic_write(__ai_ptr, 2 * sizeof(*__ai_ptr)); \
David Brazdil0f672f62019-12-10 10:32:29 +00001785 arch_cmpxchg_double_local(__ai_ptr, __VA_ARGS__); \
1786})
1787
1788#endif /* _ASM_GENERIC_ATOMIC_INSTRUMENTED_H */
Olivier Deprez157378f2022-04-04 15:47:50 +02001789// 9d5e6a315fb1335d02f0ccd3655a91c3dafcc63e