On Wed, Jul 24, 2024, at 12:31, 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 | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/lib/test_bits.c b/lib/test_bits.c > index 01313980f175..2515ddc34409 100644 > --- a/lib/test_bits.c > +++ b/lib/test_bits.c > @@ -39,6 +39,24 @@ static void genmask_ull_test(struct kunit *test) > #endif > } > > +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)); This looks like it would need an #ifdef check for either __SIZEOF_INT128__ or CONFIG_ARCH_SUPPORTS_INT128, otherwise it will fail to build on all 32-bit architectures and possibly old compiler versions on some 64-bit ones. I think I checked in the past which targets support __u128, but I don't remember the result. Arnd