diff options
author | 2025-01-14 11:36:35 +0800 | |
---|---|---|
committer | 2025-02-25 07:10:45 -0500 | |
commit | 83dc0370f915b9ad996387c141399615627e32b6 (patch) | |
tree | f1b9858a62b68836a47a8f1e7e39c4dfa944418e | |
parent | tools/virtio: Add DMA_MAPPING_ERROR and sg_dma_len api define for virtio test (diff) | |
download | wireguard-linux-83dc0370f915b9ad996387c141399615627e32b6.tar.xz wireguard-linux-83dc0370f915b9ad996387c141399615627e32b6.zip |
tools: virtio/linux/compiler.h: Add data_race() define.
Port over the definition of data_race() so we can build tools/virtio.
cc -g -O2 -Werror -Wno-maybe-uninitialized -Wall -I.
-I../include/ -I ../../usr/include/ -Wno-pointer-sign
-fno-strict-overflow -fno-strict-aliasing -fno-common
-MMD -U_FORTIFY_SOURCE -include ../../include/linux/kconfig.h
-mfunction-return=thunk -fcf-protection=none
-mindirect-branch-register -pthread
-c -o virtio_ring.o ../../drivers/virtio/virtio_ring.c
../../drivers/virtio/virtio_ring.c: in function'vring_interrupt':
../../drivers/virtio/virtio_ring.c:2711:17: error:Implicit declaration function'data_race' [-Wimplicit-function-declaration]
2711 | data_race(vq->event_triggered = true);
| ^~~~~~~~~
Signed-off-by: Yufeng Wang <wangyufeng@kylinos.cn>
Message-Id: <20250114033635.20623-1-wangyufeng@kylinos.cn>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to '')
-rw-r--r-- | tools/virtio/linux/compiler.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tools/virtio/linux/compiler.h b/tools/virtio/linux/compiler.h index 1f3a15b954b9..204ef0e9f542 100644 --- a/tools/virtio/linux/compiler.h +++ b/tools/virtio/linux/compiler.h @@ -10,4 +10,29 @@ #define READ_ONCE(var) (*((volatile typeof(var) *)(&(var)))) #define __aligned(x) __attribute((__aligned__(x))) + +/** + * data_race - mark an expression as containing intentional data races + * + * This data_race() macro is useful for situations in which data races + * should be forgiven. One example is diagnostic code that accesses + * shared variables but is not a part of the core synchronization design. + * For example, if accesses to a given variable are protected by a lock, + * except for diagnostic code, then the accesses under the lock should + * be plain C-language accesses and those in the diagnostic code should + * use data_race(). This way, KCSAN will complain if buggy lockless + * accesses to that variable are introduced, even if the buggy accesses + * are protected by READ_ONCE() or WRITE_ONCE(). + * + * This macro *does not* affect normal code generation, but is a hint + * to tooling that data races here are to be ignored. If the access must + * be atomic *and* KCSAN should ignore the access, use both data_race() + * and READ_ONCE(), for example, data_race(READ_ONCE(x)). + */ +#define data_race(expr) \ +({ \ + __auto_type __v = (expr); \ + __v; \ +}) + #endif |