Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102697808
D47631.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D47631.diff
View Options
diff --git a/share/man/man9/atomic.9 b/share/man/man9/atomic.9
--- a/share/man/man9/atomic.9
+++ b/share/man/man9/atomic.9
@@ -481,6 +481,7 @@
functions are only implemented for the types
.Dq Li int ,
.Dq Li long ,
+.Dq ptr ,
.Dq Li 32 ,
and
.Dq Li 64
diff --git a/sys/amd64/include/atomic.h b/sys/amd64/include/atomic.h
--- a/sys/amd64/include/atomic.h
+++ b/sys/amd64/include/atomic.h
@@ -589,6 +589,8 @@
#define atomic_fcmpset_rel_ptr atomic_fcmpset_rel_long
#define atomic_swap_ptr atomic_swap_long
#define atomic_readandclear_ptr atomic_readandclear_long
+#define atomic_testandset_ptr atomic_testandset_long
+#define atomic_testandclear_ptr atomic_testandclear_long
#endif /* !WANT_FUNCTIONS */
diff --git a/sys/arm/include/atomic.h b/sys/arm/include/atomic.h
--- a/sys/arm/include/atomic.h
+++ b/sys/arm/include/atomic.h
@@ -1076,6 +1076,8 @@
#define atomic_load_acq_ptr atomic_load_acq_32
#define atomic_store_rel_ptr atomic_store_rel_32
#define atomic_swap_ptr atomic_swap_32
+#define atomic_testandset_ptr atomic_testandset_32
+#define atomic_testandclear_ptr atomic_testandclear_32
#define atomic_add_int atomic_add_32
#define atomic_add_acq_int atomic_add_acq_32
diff --git a/sys/arm64/include/atomic.h b/sys/arm64/include/atomic.h
--- a/sys/arm64/include/atomic.h
+++ b/sys/arm64/include/atomic.h
@@ -609,6 +609,8 @@
#define atomic_set_ptr atomic_set_64
#define atomic_swap_ptr atomic_swap_64
#define atomic_subtract_ptr atomic_subtract_64
+#define atomic_testandclear_ptr atomic_testandclear_64
+#define atomic_testandset_ptr atomic_testandset_64
#define atomic_add_acq_long atomic_add_acq_64
#define atomic_fcmpset_acq_long atomic_fcmpset_acq_64
diff --git a/sys/i386/include/atomic.h b/sys/i386/include/atomic.h
--- a/sys/i386/include/atomic.h
+++ b/sys/i386/include/atomic.h
@@ -865,6 +865,10 @@
atomic_swap_int((volatile u_int *)(p), (u_int)(v))
#define atomic_readandclear_ptr(p) \
atomic_readandclear_int((volatile u_int *)(p))
+#define atomic_testandclear_ptr(p, val) \
+ atomic_testandclear_int((volatile u_int *)(p), (val))
+#define atomic_testandset_ptr(p, val) \
+ atomic_testandset_int((volatile u_int *)(p), (val))
#endif /* !WANT_FUNCTIONS */
diff --git a/sys/kern/subr_asan.c b/sys/kern/subr_asan.c
--- a/sys/kern/subr_asan.c
+++ b/sys/kern/subr_asan.c
@@ -827,11 +827,13 @@
ASAN_ATOMIC_FUNC_TESTANDCLEAR(64, uint64_t);
ASAN_ATOMIC_FUNC_TESTANDCLEAR(int, u_int);
ASAN_ATOMIC_FUNC_TESTANDCLEAR(long, u_long);
+ASAN_ATOMIC_FUNC_TESTANDCLEAR(ptr, uintptr_t);
ASAN_ATOMIC_FUNC_TESTANDSET(32, uint32_t);
ASAN_ATOMIC_FUNC_TESTANDSET(64, uint64_t);
ASAN_ATOMIC_FUNC_TESTANDSET(int, u_int);
ASAN_ATOMIC_FUNC_TESTANDSET(long, u_long);
+ASAN_ATOMIC_FUNC_TESTANDSET(ptr, uintptr_t);
ASAN_ATOMIC_FUNC_SWAP(32, uint32_t);
ASAN_ATOMIC_FUNC_SWAP(64, uint64_t);
diff --git a/sys/kern/subr_csan.c b/sys/kern/subr_csan.c
--- a/sys/kern/subr_csan.c
+++ b/sys/kern/subr_csan.c
@@ -658,10 +658,8 @@
CSAN_ATOMIC_FUNC_SUBTRACT(ptr, uintptr_t)
CSAN_ATOMIC_FUNC_STORE(ptr, uintptr_t)
CSAN_ATOMIC_FUNC_SWAP(ptr, uintptr_t)
-#if 0
CSAN_ATOMIC_FUNC_TESTANDCLEAR(ptr, uintptr_t)
CSAN_ATOMIC_FUNC_TESTANDSET(ptr, uintptr_t)
-#endif
#define CSAN_ATOMIC_FUNC_THREAD_FENCE(name) \
void kcsan_atomic_thread_fence_##name(void) \
diff --git a/sys/kern/subr_msan.c b/sys/kern/subr_msan.c
--- a/sys/kern/subr_msan.c
+++ b/sys/kern/subr_msan.c
@@ -1289,11 +1289,13 @@
MSAN_ATOMIC_FUNC_TESTANDCLEAR(64, uint64_t);
MSAN_ATOMIC_FUNC_TESTANDCLEAR(int, u_int);
MSAN_ATOMIC_FUNC_TESTANDCLEAR(long, u_long);
+MSAN_ATOMIC_FUNC_TESTANDCLEAR(ptr, uintptr_t);
MSAN_ATOMIC_FUNC_TESTANDSET(32, uint32_t);
MSAN_ATOMIC_FUNC_TESTANDSET(64, uint64_t);
MSAN_ATOMIC_FUNC_TESTANDSET(int, u_int);
MSAN_ATOMIC_FUNC_TESTANDSET(long, u_long);
+MSAN_ATOMIC_FUNC_TESTANDSET(ptr, uintptr_t);
MSAN_ATOMIC_FUNC_SWAP(32, uint32_t);
MSAN_ATOMIC_FUNC_SWAP(64, uint64_t);
diff --git a/sys/powerpc/include/atomic.h b/sys/powerpc/include/atomic.h
--- a/sys/powerpc/include/atomic.h
+++ b/sys/powerpc/include/atomic.h
@@ -1093,6 +1093,16 @@
return (a);
}
+#ifdef __powerpc64__
+#define atomic_testandclear_ptr atomic_testandclear_long
+#define atomic_testandset_ptr atomic_testandset_long
+#else
+#define atomic_testandclear_ptr(p,v) \
+ atomic_testandclear_32((volatile u_int *)(p), v)
+#define atomic_testandset_ptr(p,v) \
+ atomic_testandset_32((volatile u_int *)(p), v)
+#endif
+
static __inline void
atomic_thread_fence_acq(void)
{
diff --git a/sys/riscv/include/atomic.h b/sys/riscv/include/atomic.h
--- a/sys/riscv/include/atomic.h
+++ b/sys/riscv/include/atomic.h
@@ -557,6 +557,8 @@
#define atomic_set_ptr atomic_set_64
#define atomic_subtract_ptr atomic_subtract_64
#define atomic_swap_ptr atomic_swap_64
+#define atomic_testandclear_ptr atomic_testandclear_64
+#define atomic_testandset_ptr atomic_testandset_64
ATOMIC_ACQ_REL(set, 64)
ATOMIC_ACQ_REL(clear, 64)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Nov 17, 12:20 AM (22 h, 19 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14668167
Default Alt Text
D47631.diff (4 KB)
Attached To
Mode
D47631: atomic(9): Implement atomic_testand(clear|set)_ptr
Attached
Detach File
Event Timeline
Log In to Comment