@@ -39,6 +39,36 @@ static void genmask_ull_test(struct kunit *test)
39
39
#endif
40
40
}
41
41
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
+
42
72
static void genmask_input_check_test (struct kunit * test )
43
73
{
44
74
unsigned int x , y ;
@@ -56,12 +86,16 @@ static void genmask_input_check_test(struct kunit *test)
56
86
/* Valid input */
57
87
KUNIT_EXPECT_EQ (test , 0 , GENMASK_INPUT_CHECK (1 , 1 ));
58
88
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 ));
59
92
}
60
93
61
94
62
95
static struct kunit_case bits_test_cases [] = {
63
96
KUNIT_CASE (genmask_test ),
64
97
KUNIT_CASE (genmask_ull_test ),
98
+ KUNIT_CASE (genmask_u128_test ),
65
99
KUNIT_CASE (genmask_input_check_test ),
66
100
{}
67
101
};
0 commit comments