]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
test_bits: add tests for __GENMASK() and __GENMASK_ULL()
authorVincent Mailhol <mailhol.vincent@wanadoo.fr>
Mon, 9 Jun 2025 02:45:47 +0000 (11:45 +0900)
committerYury Norov <yury.norov@gmail.com>
Thu, 31 Jul 2025 15:28:03 +0000 (11:28 -0400)
The definitions of GENMASK() and GENMASK_ULL() do not depend any more
on __GENMASK() and __GENMASK_ULL(). Duplicate the existing unit tests
so that __GENMASK{,ULL}() are still covered.

Because __GENMASK() and __GENMASK_ULL() do use GENMASK_INPUT_CHECK(),
drop the TEST_GENMASK_FAILURES negative tests.

It would be good to have a small assembly test case for GENMASK*() in
case somebody decides to unify both in the future. However, I lack
expertise in assembly to do so. Instead add a FIXME message to
highlight the absence of the asm unit test.

Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Yury Norov (NVIDIA) <yury.norov@gmail.com>
lib/tests/test_bits.c

index 47325b41515fde2c3ed434ed6f4094925c98886b..ab88e50d2edfa2b011f07d50460ac8ea6ff99923 100644 (file)
@@ -26,6 +26,23 @@ static_assert(assert_type(u16, GENMASK_U16(15, 0)) == U16_MAX);
 static_assert(assert_type(u32, GENMASK_U32(31, 0)) == U32_MAX);
 static_assert(assert_type(u64, GENMASK_U64(63, 0)) == U64_MAX);
 
+/* FIXME: add a test case written in asm for GENMASK() and GENMASK_ULL() */
+
+static void __genmask_test(struct kunit *test)
+{
+       KUNIT_EXPECT_EQ(test, 1ul, __GENMASK(0, 0));
+       KUNIT_EXPECT_EQ(test, 3ul, __GENMASK(1, 0));
+       KUNIT_EXPECT_EQ(test, 6ul, __GENMASK(2, 1));
+       KUNIT_EXPECT_EQ(test, 0xFFFFFFFFul, __GENMASK(31, 0));
+}
+
+static void __genmask_ull_test(struct kunit *test)
+{
+       KUNIT_EXPECT_EQ(test, 1ull, __GENMASK_ULL(0, 0));
+       KUNIT_EXPECT_EQ(test, 3ull, __GENMASK_ULL(1, 0));
+       KUNIT_EXPECT_EQ(test, 0x000000ffffe00000ull, __GENMASK_ULL(39, 21));
+       KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, __GENMASK_ULL(63, 0));
+}
 
 static void genmask_test(struct kunit *test)
 {
@@ -123,6 +140,8 @@ static void genmask_input_check_test(struct kunit *test)
 
 
 static struct kunit_case bits_test_cases[] = {
+       KUNIT_CASE(__genmask_test),
+       KUNIT_CASE(__genmask_ull_test),
        KUNIT_CASE(genmask_test),
        KUNIT_CASE(genmask_ull_test),
        KUNIT_CASE(genmask_u128_test),