On 7/30/24 23:50, Yury Norov wrote: > On Thu, Jul 25, 2024 at 11:18:08AM +0530, Anshuman Khandual wrote: >> This adds GENMASK_U128() tests although currently only 64 bit wide masks >> are being tested. >> >> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> >> Cc: linux-kernel@xxxxxxxxxxxxxxx >> Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx> >> --- >> lib/test_bits.c | 25 +++++++++++++++++++++++++ >> 1 file changed, 25 insertions(+) >> >> diff --git a/lib/test_bits.c b/lib/test_bits.c >> index 01313980f175..f0d1033cf3c9 100644 >> --- a/lib/test_bits.c >> +++ b/lib/test_bits.c >> @@ -39,6 +39,26 @@ static void genmask_ull_test(struct kunit *test) >> #endif >> } >> >> +#ifdef CONFIG_ARCH_SUPPORTS_INT128 > > Can you move this ifdefery inside the function scope, so that you'll > not have do it below in tests array declarattion? Sure, will fold in the following changes in here. diff --git a/lib/test_bits.c b/lib/test_bits.c index f0d1033cf3c9..f8b058974d07 100644 --- a/lib/test_bits.c +++ b/lib/test_bits.c @@ -39,9 +39,9 @@ static void genmask_ull_test(struct kunit *test) #endif } -#ifdef CONFIG_ARCH_SUPPORTS_INT128 static void genmask_u128_test(struct kunit *test) { +#ifdef CONFIG_ARCH_SUPPORTS_INT128 /* Tests mask generation only when the mask width is within 64 bits */ KUNIT_EXPECT_EQ(test, 0x0000000000ff0000ULL, GENMASK_U128(87, 80) >> 64); KUNIT_EXPECT_EQ(test, 0x0000000000ffffffULL, GENMASK_U128(87, 64) >> 64); @@ -56,8 +56,8 @@ static void genmask_u128_test(struct kunit *test) GENMASK_U128(0, 10); GENMASK_U128(9, 10); #endif -} #endif +} static void genmask_input_check_test(struct kunit *test) { @@ -84,9 +84,7 @@ 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), -#ifdef CONFIG_ARCH_SUPPORTS_INT128 KUNIT_CASE(genmask_u128_test), -#endif KUNIT_CASE(genmask_input_check_test), {} }; > >> +static void genmask_u128_test(struct kunit *test) >> +{ >> + /* Tests mask generation only when the mask width is within 64 bits */ >> + KUNIT_EXPECT_EQ(test, 0x0000000000ff0000ULL, GENMASK_U128(87, 80) >> 64); >> + KUNIT_EXPECT_EQ(test, 0x0000000000ffffffULL, GENMASK_U128(87, 64) >> 64); >> + KUNIT_EXPECT_EQ(test, 0x0000000000000001ULL, GENMASK_U128(0, 0)); >> + KUNIT_EXPECT_EQ(test, 0xffffffffffffffffULL, GENMASK_U128(63, 0)); >> + KUNIT_EXPECT_EQ(test, 0xffffffffffffffffULL, GENMASK_U128(64, 0) >> 1); >> + KUNIT_EXPECT_EQ(test, 0x00000000ffffffffULL, GENMASK_U128(81, 50) >> 50); >> + >> +#ifdef TEST_GENMASK_FAILURES >> + /* these should fail compilation */ >> + GENMASK_U128(0, 1); >> + GENMASK_U128(0, 10); >> + GENMASK_U128(9, 10); >> +#endif >> +} >> +#endif >> + >> static void genmask_input_check_test(struct kunit *test) >> { >> unsigned int x, y; >> @@ -56,12 +76,17 @@ static void genmask_input_check_test(struct kunit *test) >> /* Valid input */ >> KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(1, 1)); >> KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(39, 21)); >> + KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(100, 80)); >> + KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(110, 65)); >> } >> >> >> static struct kunit_case bits_test_cases[] = { >> KUNIT_CASE(genmask_test), >> KUNIT_CASE(genmask_ull_test), >> +#ifdef CONFIG_ARCH_SUPPORTS_INT128 >> + KUNIT_CASE(genmask_u128_test), >> +#endif >> KUNIT_CASE(genmask_input_check_test), >> {} >> }; >> -- >> 2.30.2