From: Boqun Feng <boqun.feng@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: torvalds@linux-foundation.org, corbet@lwn.net, will@kernel.org,
mark.rutland@arm.com, catalin.marinas@arm.com, dennis@kernel.org,
tj@kernel.org, cl@linux.com, hca@linux.ibm.com,
gor@linux.ibm.com, agordeev@linux.ibm.com,
borntraeger@linux.ibm.com, svens@linux.ibm.com,
Herbert Xu <herbert@gondor.apana.org.au>,
davem@davemloft.net, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, joro@8bytes.org, suravee.suthikulpanit@amd.com,
robin.murphy@arm.com, dwmw2@infradead.org,
baolu.lu@linux.intel.com, Arnd Bergmann <arnd@arndb.de>,
penberg@kernel.org, rientjes@google.com, iamjoonsoo.kim@lge.com,
Andrew Morton <akpm@linux-foundation.org>,
vbabka@suse.cz, roman.gushchin@linux.dev, 42.hyeyoo@gmail.com,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, linux-s390@vger.kernel.org,
linux-crypto@vger.kernel.org, iommu@lists.linux.dev,
linux-arch@vger.kernel.org
Subject: Re: [RFC][PATCH 00/12] Introduce cmpxchg128() -- aka. the demise of cmpxchg_double()
Date: Wed, 21 Dec 2022 17:21:09 -0800 [thread overview]
Message-ID: <Y6OxBW5F/ZF5wocE@boqun-archlinux> (raw)
In-Reply-To: <20221219153525.632521981@infradead.org>
Hi Peter,
On Mon, Dec 19, 2022 at 04:35:25PM +0100, Peter Zijlstra wrote:
> Hi,
>
> Since Linus hated on cmpxchg_double(), a few patches to get rid of it, as proposed here:
>
> https://lkml.kernel.org/r/Y2U3WdU61FvYlpUh@hirez.programming.kicks-ass.net
>
> based on tip/master because Linus' tree is moving a wee bit fast at the moment.
>
> 0day robot is all green for building, very limited testing on arm64/s390
> for obvious raisins -- I tried to get the asm right, but please, double
> check.
>
I added some test cases for cmpxcgh128 APIs, and found two issues. I
will reply separately in the patches. The test cases themselves are at
the end, let me know if you want to me to send a proper patch.
Regards,
Boqun
------------------------------------------------------------>8
Subject: [PATCH] atomic: Add test cases for cmpxchg128 family
Besides for 32bit and 64bit cmpxchg, we only test via atomic_cmpxchg_*
APIs, add tests via cmpxchg* APIs while we are at it.
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
---
lib/atomic64_test.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/lib/atomic64_test.c b/lib/atomic64_test.c
index d9d170238165..7f79d0704ba8 100644
--- a/lib/atomic64_test.c
+++ b/lib/atomic64_test.c
@@ -76,12 +76,19 @@ do { \
BUG_ON(atomic##bit##_read(&v) != expect); \
} while (0)
+#define TEST_ARGS_PLAIN(_, op, init, ret, expect, args...) \
+do { \
+ __WRITE_ONCE(n, init); \
+ BUG_ON(op(&n, ##args) != ret); \
+ BUG_ON(__READ_ONCE(n) != expect); \
+} while (0)
+
#define XCHG_FAMILY_TEST(bit, init, new) \
do { \
FAMILY_TEST(TEST_ARGS, bit, xchg, init, init, new, new); \
} while (0)
-#define CMPXCHG_FAMILY_TEST(bit, init, new, wrong) \
+#define ATOMIC_CMPXCHG_FAMILY_TEST(bit, init, new, wrong) \
do { \
FAMILY_TEST(TEST_ARGS, bit, cmpxchg, \
init, init, new, init, new); \
@@ -89,6 +96,14 @@ do { \
init, init, init, wrong, new); \
} while (0)
+#define CMPXCHG_FAMILY_TEST(bit, init, new, wrong) \
+do { \
+ FAMILY_TEST(TEST_ARGS_PLAIN, _, cmpxchg##bit, \
+ init, init, new, init, new); \
+ FAMILY_TEST(TEST_ARGS_PLAIN, _, cmpxchg##bit, \
+ init, init, init, wrong, new); \
+} while (0)
+
#define INC_RETURN_FAMILY_TEST(bit, i) \
do { \
FAMILY_TEST(TEST_ARGS, bit, inc_return, \
@@ -109,6 +124,7 @@ static __init void test_atomic(void)
int one = 1;
atomic_t v;
+ int n;
int r;
TEST(, add, +=, onestwos);
@@ -139,6 +155,7 @@ static __init void test_atomic(void)
DEC_RETURN_FAMILY_TEST(, v0);
XCHG_FAMILY_TEST(, v0, v1);
+ ATOMIC_CMPXCHG_FAMILY_TEST(, v0, v1, onestwos);
CMPXCHG_FAMILY_TEST(, v0, v1, onestwos);
}
@@ -155,6 +172,7 @@ static __init void test_atomic64(void)
int r_int;
atomic64_t v = ATOMIC64_INIT(v0);
+ long long n = 0;
long long r = v0;
BUG_ON(v.counter != r);
@@ -201,6 +219,7 @@ static __init void test_atomic64(void)
DEC_RETURN_FAMILY_TEST(64, v0);
XCHG_FAMILY_TEST(64, v0, v1);
+ ATOMIC_CMPXCHG_FAMILY_TEST(64, v0, v1, v2);
CMPXCHG_FAMILY_TEST(64, v0, v1, v2);
INIT(v0);
@@ -245,10 +264,30 @@ static __init void test_atomic64(void)
BUG_ON(!r_int);
}
+#ifdef system_has_cmpxchg128
+static __init void test_atomic128(void)
+{
+ long long v0 = 0xaaa31337c001d00dLL;
+ long long v1 = 0xdeadbeefdeafcafeLL;
+ long long v2 = 0xfaceabadf00df001LL;
+ long long v3 = 0x8000000000000000LL;
+
+ s128 init = ((s128)v0 << 64) + v1;
+ s128 new = ((s128)v1 << 64) + v0;
+ s128 wrong = ((s128)v2 << 64) + v3;
+ s128 n = 1;
+
+ CMPXCHG_FAMILY_TEST(128, init, new, wrong);
+}
+#else
+static __init void test_atomic128(void) {}
+#endif
+
static __init int test_atomics_init(void)
{
test_atomic();
test_atomic64();
+ test_atomic128();
#ifdef CONFIG_X86
pr_info("passed for %s platform %s CX8 and %s SSE\n",
--
2.38.1
prev parent reply other threads:[~2022-12-22 1:21 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-19 15:35 [RFC][PATCH 00/12] Introduce cmpxchg128() -- aka. the demise of cmpxchg_double() Peter Zijlstra
2022-12-19 15:35 ` [RFC][PATCH 01/12] crypto: Remove u128 usage Peter Zijlstra
2022-12-19 15:56 ` Jason A. Donenfeld
2022-12-19 17:00 ` Peter Zijlstra
2022-12-19 17:03 ` Jason A. Donenfeld
2022-12-20 3:50 ` Herbert Xu
2022-12-20 4:11 ` H. Peter Anvin
2022-12-20 4:15 ` Herbert Xu
2022-12-19 15:35 ` [RFC][PATCH 02/12] crypto/ghash-clmulni: Use (struct) be128 Peter Zijlstra
2022-12-20 5:45 ` Eric Biggers
2022-12-19 15:35 ` [RFC][PATCH 03/12] cyrpto/b128ops: Remove struct u128 Peter Zijlstra
2022-12-20 5:52 ` Eric Biggers
2022-12-19 15:35 ` [RFC][PATCH 04/12] types: Introduce [us]128 Peter Zijlstra
2022-12-29 8:30 ` Pavel Machek
2022-12-19 15:35 ` [RFC][PATCH 05/12] arch: Introduce arch_{,try_}_cmpxchg128{,_local}() Peter Zijlstra
2022-12-19 20:07 ` Boqun Feng
2022-12-20 11:08 ` Peter Zijlstra
2022-12-20 14:31 ` Linus Torvalds
2022-12-20 15:09 ` Peter Zijlstra
2023-01-03 13:25 ` Mark Rutland
2023-01-03 14:03 ` Mark Rutland
2023-01-03 16:19 ` Mark Rutland
2023-01-03 16:50 ` Arnd Bergmann
2023-01-04 11:36 ` Mark Rutland
2023-01-04 13:55 ` Mark Rutland
2022-12-22 1:25 ` Boqun Feng
2022-12-22 13:16 ` Peter Zijlstra
2023-01-03 17:12 ` Heiko Carstens
2023-01-09 18:50 ` Mark Rutland
2023-01-12 10:35 ` Peter Zijlstra
2022-12-19 15:35 ` [RFC][PATCH 06/12] instrumentation: Wire up cmpxchg128() Peter Zijlstra
2022-12-19 15:35 ` [RFC][PATCH 07/12] percpu: Wire up cmpxchg128 Peter Zijlstra
2022-12-29 13:36 ` Arnd Bergmann
2023-01-04 12:09 ` Heiko Carstens
2023-01-09 16:29 ` Peter Zijlstra
2022-12-19 15:35 ` [RFC][PATCH 08/12] s390: Replace cmpxchg_double() with cmpxchg128() Peter Zijlstra
2023-01-10 7:23 ` Heiko Carstens
2023-01-10 8:32 ` Peter Zijlstra
2023-01-10 11:27 ` Mark Rutland
2023-01-10 11:46 ` Heiko Carstens
2023-01-12 11:12 ` Alexander Gordeev
2022-12-19 15:35 ` [RFC][PATCH 09/12] x86,amd_iommu: Replace cmpxchg_double() Peter Zijlstra
2022-12-19 16:47 ` Niklas Schnelle
2022-12-28 8:40 ` Vasant Hegde
2022-12-19 15:35 ` [RFC][PATCH 10/12] x86,intel_iommu: " Peter Zijlstra
2022-12-19 15:35 ` [RFC][PATCH 11/12] slub: " Peter Zijlstra
2023-01-03 15:58 ` Vlastimil Babka
2023-01-03 17:16 ` Heiko Carstens
2023-01-03 19:08 ` Linus Torvalds
2023-01-04 12:07 ` Heiko Carstens
2023-01-09 16:28 ` Peter Zijlstra
2023-01-09 22:02 ` Linus Torvalds
2023-01-09 22:22 ` H. Peter Anvin
2023-01-10 2:09 ` H. Peter Anvin
2023-01-10 10:28 ` Peter Zijlstra
2022-12-19 15:35 ` [RFC][PATCH 12/12] arch: Remove cmpxchg_double Peter Zijlstra
2022-12-22 1:21 ` Boqun Feng [this message]
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=Y6OxBW5F/ZF5wocE@boqun-archlinux \
--to=boqun.feng@gmail.com \
--cc=42.hyeyoo@gmail.com \
--cc=agordeev@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=baolu.lu@linux.intel.com \
--cc=borntraeger@linux.ibm.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=cl@linux.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=dennis@kernel.org \
--cc=dwmw2@infradead.org \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=herbert@gondor.apana.org.au \
--cc=hpa@zytor.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=iommu@lists.linux.dev \
--cc=joro@8bytes.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-s390@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=penberg@kernel.org \
--cc=peterz@infradead.org \
--cc=rientjes@google.com \
--cc=robin.murphy@arm.com \
--cc=roman.gushchin@linux.dev \
--cc=suravee.suthikulpanit@amd.com \
--cc=svens@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=vbabka@suse.cz \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.