From: Brendan Jackman <jackmanb@google.com>
To: "Liam R. Howlett" <Liam.Howlett@oracle.com>,
Andrew Morton <akpm@linux-foundation.org>,
Lorenzo Stoakes <lorenzo.stoakes@oracle.com>,
Vlastimil Babka <vbabka@suse.cz>, Jann Horn <jannh@google.com>,
Pedro Falcato <pfalcato@suse.de>
Cc: linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org,
linux-mm@kvack.org, Brendan Jackman <jackmanb@google.com>
Subject: [PATCH 2/3] tools: testing: Use existing atomic.h for vma/radix-tree tests
Date: Wed, 27 Aug 2025 11:04:42 +0000 [thread overview]
Message-ID: <20250827-b4-vma-no-atomic-h-v1-2-5d3a94ae670f@google.com> (raw)
In-Reply-To: <20250827-b4-vma-no-atomic-h-v1-0-5d3a94ae670f@google.com>
The shared userspace logic used for unit-testing radix-tree and VMA code
currently has its own replacements for atomics helpers. This is not
needed as the necessary APIs already have userspace implementations in
the tools tree. Switching over to that allows deleting a bit of code.
Note that the implementation is different; while the version being
deleted here is implemented using liburcu, the existing version in tools
uses either x86 asm or compiler builtins. It's assumed that both are
equally likely to be correct.
The tools tree's version of atomic_t is a struct type while the version
being deleted was just a typedef of an integer. This means it's no
longer valid to call __sync_bool_compare_and_swap() directly on it. One
option would be to just peek into the struct and call it on the field,
but it seems a little cleaner to just use the corresponding atomic.h
API. On non-x86 archs this is implemented using
__sync_val_compare_and_swap(). It's not clear why the old version uses
the bool variant instead of the generic "val" one, for now it's assumed
that this was a mistake.
Signed-off-by: Brendan Jackman <jackmanb@google.com>
---
tools/testing/shared/linux/maple_tree.h | 6 ++----
tools/testing/vma/linux/atomic.h | 17 -----------------
tools/testing/vma/vma_internal.h | 3 ++-
3 files changed, 4 insertions(+), 22 deletions(-)
diff --git a/tools/testing/shared/linux/maple_tree.h b/tools/testing/shared/linux/maple_tree.h
index f67d47d32857cee296c2784da57825c9a31cd340..7d0fadef0f11624dbb110ad351aabdc79a19dcd2 100644
--- a/tools/testing/shared/linux/maple_tree.h
+++ b/tools/testing/shared/linux/maple_tree.h
@@ -1,7 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0+ */
-#define atomic_t int32_t
-#define atomic_inc(x) uatomic_inc(x)
-#define atomic_read(x) uatomic_read(x)
-#define atomic_set(x, y) uatomic_set(x, y)
+#include <linux/atomic.h>
+
#define U8_MAX UCHAR_MAX
#include "../../../../include/linux/maple_tree.h"
diff --git a/tools/testing/vma/linux/atomic.h b/tools/testing/vma/linux/atomic.h
deleted file mode 100644
index 788c597c4fdea7392307de93ff4459453b96179b..0000000000000000000000000000000000000000
--- a/tools/testing/vma/linux/atomic.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#ifndef _LINUX_ATOMIC_H
-#define _LINUX_ATOMIC_H
-
-#define atomic_t int32_t
-#define atomic_inc(x) uatomic_inc(x)
-#define atomic_read(x) uatomic_read(x)
-#define atomic_set(x, y) uatomic_set(x, y)
-#define U8_MAX UCHAR_MAX
-
-#ifndef atomic_cmpxchg_relaxed
-#define atomic_cmpxchg_relaxed uatomic_cmpxchg
-#define atomic_cmpxchg_release uatomic_cmpxchg
-#endif /* atomic_cmpxchg_relaxed */
-
-#endif /* _LINUX_ATOMIC_H */
diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_internal.h
index 3639aa8dd2b06ebe5b9cfcfe6669994fd38c482d..a720a4e6bada83e6b32e76762089eeec35ba8fac 100644
--- a/tools/testing/vma/vma_internal.h
+++ b/tools/testing/vma/vma_internal.h
@@ -21,6 +21,7 @@
#include <stdlib.h>
+#include <linux/atomic.h>
#include <linux/list.h>
#include <linux/maple_tree.h>
#include <linux/mm.h>
@@ -1381,7 +1382,7 @@ static inline int mapping_map_writable(struct address_space *mapping)
do {
if (c < 0)
return -EPERM;
- } while (!__sync_bool_compare_and_swap(&mapping->i_mmap_writable, c, c+1));
+ } while (!atomic_cmpxchg(&mapping->i_mmap_writable, c, c+1));
return 0;
}
--
2.50.1
next prev parent reply other threads:[~2025-08-27 11:04 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-27 11:04 [PATCH 0/3] tools: testing: Use existing atomic.h for vma/radix-tree tests Brendan Jackman
2025-08-27 11:04 ` [PATCH 1/3] tools: testing: Allow importing arch headers in shared.mk Brendan Jackman
2025-08-27 12:50 ` Pedro Falcato
2025-08-27 15:07 ` Brendan Jackman
2025-08-27 18:43 ` Liam R. Howlett
2025-08-28 1:00 ` Liam R. Howlett
2025-08-28 10:23 ` Lorenzo Stoakes
2025-08-28 11:59 ` Brendan Jackman
2025-08-27 11:04 ` Brendan Jackman [this message]
2025-08-27 12:56 ` [PATCH 2/3] tools: testing: Use existing atomic.h for vma/radix-tree tests Pedro Falcato
2025-08-27 15:19 ` Brendan Jackman
2025-08-28 1:05 ` Liam R. Howlett
2025-08-28 9:20 ` Brendan Jackman
2025-08-28 10:26 ` Lorenzo Stoakes
2025-08-27 11:04 ` [PATCH 3/3] tools: testing: Support EXTRA_CFLAGS in shared.mk Brendan Jackman
2025-08-27 12:57 ` Pedro Falcato
2025-08-28 1:04 ` Liam R. Howlett
2025-08-28 10:27 ` Lorenzo Stoakes
2025-08-28 10:28 ` [PATCH 0/3] tools: testing: Use existing atomic.h for vma/radix-tree tests Lorenzo Stoakes
2025-08-28 12:09 ` Brendan Jackman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250827-b4-vma-no-atomic-h-v1-2-5d3a94ae670f@google.com \
--to=jackmanb@google.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=jannh@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=maple-tree@lists.infradead.org \
--cc=pfalcato@suse.de \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).