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