@@ -39,6 +39,36 @@ static void genmask_ull_test(struct kunit *test)
3939#endif
4040}
4141
42+ static void genmask_u128_test (struct kunit * test )
43+ {
44+ #ifdef CONFIG_ARCH_SUPPORTS_INT128
45+ /* Below 64 bit masks */
46+ KUNIT_EXPECT_EQ (test , 0x0000000000000001ull , GENMASK_U128 (0 , 0 ));
47+ KUNIT_EXPECT_EQ (test , 0x0000000000000003ull , GENMASK_U128 (1 , 0 ));
48+ KUNIT_EXPECT_EQ (test , 0x0000000000000006ull , GENMASK_U128 (2 , 1 ));
49+ KUNIT_EXPECT_EQ (test , 0x00000000ffffffffull , GENMASK_U128 (31 , 0 ));
50+ KUNIT_EXPECT_EQ (test , 0x000000ffffe00000ull , GENMASK_U128 (39 , 21 ));
51+ KUNIT_EXPECT_EQ (test , 0xffffffffffffffffull , GENMASK_U128 (63 , 0 ));
52+
53+ /* Above 64 bit masks - only 64 bit portion can be validated once */
54+ KUNIT_EXPECT_EQ (test , 0xffffffffffffffffull , GENMASK_U128 (64 , 0 ) >> 1 );
55+ KUNIT_EXPECT_EQ (test , 0x00000000ffffffffull , GENMASK_U128 (81 , 50 ) >> 50 );
56+ KUNIT_EXPECT_EQ (test , 0x0000000000ffffffull , GENMASK_U128 (87 , 64 ) >> 64 );
57+ KUNIT_EXPECT_EQ (test , 0x0000000000ff0000ull , GENMASK_U128 (87 , 80 ) >> 64 );
58+
59+ KUNIT_EXPECT_EQ (test , 0xffffffffffffffffull , GENMASK_U128 (127 , 0 ) >> 64 );
60+ KUNIT_EXPECT_EQ (test , 0xffffffffffffffffull , (u64 )GENMASK_U128 (127 , 0 ));
61+ KUNIT_EXPECT_EQ (test , 0x0000000000000003ull , GENMASK_U128 (127 , 126 ) >> 126 );
62+ KUNIT_EXPECT_EQ (test , 0x0000000000000001ull , GENMASK_U128 (127 , 127 ) >> 127 );
63+ #ifdef TEST_GENMASK_FAILURES
64+ /* these should fail compilation */
65+ GENMASK_U128 (0 , 1 );
66+ GENMASK_U128 (0 , 10 );
67+ GENMASK_U128 (9 , 10 );
68+ #endif /* TEST_GENMASK_FAILURES */
69+ #endif /* CONFIG_ARCH_SUPPORTS_INT128 */
70+ }
71+
4272static void genmask_input_check_test (struct kunit * test )
4373{
4474 unsigned int x , y ;
@@ -56,12 +86,16 @@ static void genmask_input_check_test(struct kunit *test)
5686 /* Valid input */
5787 KUNIT_EXPECT_EQ (test , 0 , GENMASK_INPUT_CHECK (1 , 1 ));
5888 KUNIT_EXPECT_EQ (test , 0 , GENMASK_INPUT_CHECK (39 , 21 ));
89+ KUNIT_EXPECT_EQ (test , 0 , GENMASK_INPUT_CHECK (100 , 80 ));
90+ KUNIT_EXPECT_EQ (test , 0 , GENMASK_INPUT_CHECK (110 , 65 ));
91+ KUNIT_EXPECT_EQ (test , 0 , GENMASK_INPUT_CHECK (127 , 0 ));
5992}
6093
6194
6295static struct kunit_case bits_test_cases [] = {
6396 KUNIT_CASE (genmask_test ),
6497 KUNIT_CASE (genmask_ull_test ),
98+ KUNIT_CASE (genmask_u128_test ),
6599 KUNIT_CASE (genmask_input_check_test ),
66100 {}
67101};
0 commit comments