xref: /linux/mm/tests/lazy_mmu_mode_kunit.c (revision 4cff5c05e076d2ee4e34122aa956b84a2eaac587)
1*ee628d9cSKevin Brodsky // SPDX-License-Identifier: GPL-2.0-only
2*ee628d9cSKevin Brodsky #include <kunit/test.h>
3*ee628d9cSKevin Brodsky #include <linux/pgtable.h>
4*ee628d9cSKevin Brodsky 
5*ee628d9cSKevin Brodsky MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
6*ee628d9cSKevin Brodsky 
7*ee628d9cSKevin Brodsky static void expect_not_active(struct kunit *test)
8*ee628d9cSKevin Brodsky {
9*ee628d9cSKevin Brodsky 	KUNIT_EXPECT_FALSE(test, is_lazy_mmu_mode_active());
10*ee628d9cSKevin Brodsky }
11*ee628d9cSKevin Brodsky 
12*ee628d9cSKevin Brodsky static void expect_active(struct kunit *test)
13*ee628d9cSKevin Brodsky {
14*ee628d9cSKevin Brodsky 	KUNIT_EXPECT_TRUE(test, is_lazy_mmu_mode_active());
15*ee628d9cSKevin Brodsky }
16*ee628d9cSKevin Brodsky 
17*ee628d9cSKevin Brodsky static void lazy_mmu_mode_active(struct kunit *test)
18*ee628d9cSKevin Brodsky {
19*ee628d9cSKevin Brodsky 	expect_not_active(test);
20*ee628d9cSKevin Brodsky 
21*ee628d9cSKevin Brodsky 	lazy_mmu_mode_enable();
22*ee628d9cSKevin Brodsky 	expect_active(test);
23*ee628d9cSKevin Brodsky 
24*ee628d9cSKevin Brodsky 	{
25*ee628d9cSKevin Brodsky 		/* Nested section */
26*ee628d9cSKevin Brodsky 		lazy_mmu_mode_enable();
27*ee628d9cSKevin Brodsky 		expect_active(test);
28*ee628d9cSKevin Brodsky 
29*ee628d9cSKevin Brodsky 		lazy_mmu_mode_disable();
30*ee628d9cSKevin Brodsky 		expect_active(test);
31*ee628d9cSKevin Brodsky 	}
32*ee628d9cSKevin Brodsky 
33*ee628d9cSKevin Brodsky 	{
34*ee628d9cSKevin Brodsky 		/* Paused section */
35*ee628d9cSKevin Brodsky 		lazy_mmu_mode_pause();
36*ee628d9cSKevin Brodsky 		expect_not_active(test);
37*ee628d9cSKevin Brodsky 
38*ee628d9cSKevin Brodsky 		{
39*ee628d9cSKevin Brodsky 			/* No effect (paused) */
40*ee628d9cSKevin Brodsky 			lazy_mmu_mode_enable();
41*ee628d9cSKevin Brodsky 			expect_not_active(test);
42*ee628d9cSKevin Brodsky 
43*ee628d9cSKevin Brodsky 			lazy_mmu_mode_disable();
44*ee628d9cSKevin Brodsky 			expect_not_active(test);
45*ee628d9cSKevin Brodsky 
46*ee628d9cSKevin Brodsky 			lazy_mmu_mode_pause();
47*ee628d9cSKevin Brodsky 			expect_not_active(test);
48*ee628d9cSKevin Brodsky 
49*ee628d9cSKevin Brodsky 			lazy_mmu_mode_resume();
50*ee628d9cSKevin Brodsky 			expect_not_active(test);
51*ee628d9cSKevin Brodsky 		}
52*ee628d9cSKevin Brodsky 
53*ee628d9cSKevin Brodsky 		lazy_mmu_mode_resume();
54*ee628d9cSKevin Brodsky 		expect_active(test);
55*ee628d9cSKevin Brodsky 	}
56*ee628d9cSKevin Brodsky 
57*ee628d9cSKevin Brodsky 	lazy_mmu_mode_disable();
58*ee628d9cSKevin Brodsky 	expect_not_active(test);
59*ee628d9cSKevin Brodsky }
60*ee628d9cSKevin Brodsky 
61*ee628d9cSKevin Brodsky static struct kunit_case lazy_mmu_mode_test_cases[] = {
62*ee628d9cSKevin Brodsky 	KUNIT_CASE(lazy_mmu_mode_active),
63*ee628d9cSKevin Brodsky 	{}
64*ee628d9cSKevin Brodsky };
65*ee628d9cSKevin Brodsky 
66*ee628d9cSKevin Brodsky static struct kunit_suite lazy_mmu_mode_test_suite = {
67*ee628d9cSKevin Brodsky 	.name = "lazy_mmu_mode",
68*ee628d9cSKevin Brodsky 	.test_cases = lazy_mmu_mode_test_cases,
69*ee628d9cSKevin Brodsky };
70*ee628d9cSKevin Brodsky kunit_test_suite(lazy_mmu_mode_test_suite);
71*ee628d9cSKevin Brodsky 
72*ee628d9cSKevin Brodsky MODULE_DESCRIPTION("Tests for the lazy MMU mode");
73*ee628d9cSKevin Brodsky MODULE_LICENSE("GPL");
74