]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
arm_mpam: Disable preemption when making accesses to fake MSC in kunit test
authorBen Horgan <ben.horgan@arm.com>
Fri, 6 Mar 2026 18:27:17 +0000 (18:27 +0000)
committerWill Deacon <will@kernel.org>
Fri, 13 Mar 2026 14:17:30 +0000 (14:17 +0000)
Accesses to MSC must be made from a cpu that is affine to that MSC and the
driver checks this in __mpam_write_reg() using smp_processor_id(). A fake
in-memory MSC is used for testing. When using that, it doesn't matter which
cpu we access it from but calling smp_processor_id() from a preemptible
context gives warnings when running with CONFIG_DEBUG_PREEMPT.

Add a test helper that wraps mpam_reset_msc_bitmap() with preemption
disabled to ensure all (fake) MSC accesses are made with preemption
disabled.

Signed-off-by: Ben Horgan <ben.horgan@arm.com>
Reviewed-by: James Morse <james.morse@arm.com>
Signed-off-by: James Morse <james.morse@arm.com>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/resctrl/test_mpam_devices.c

index 3e8d564a0c6474d6d9ab31e67f49b6872e4a90ed..75bd41bcc395122c715defe312b8c3819ed85f19 100644 (file)
@@ -322,6 +322,14 @@ static void test_mpam_enable_merge_features(struct kunit *test)
        mutex_unlock(&mpam_list_lock);
 }
 
+static void __test_mpam_reset_msc_bitmap(struct mpam_msc *msc, u16 reg, u16 wd)
+{
+       /* Avoid warnings when running with CONFIG_DEBUG_PREEMPT */
+       guard(preempt)();
+
+       mpam_reset_msc_bitmap(msc, reg, wd);
+}
+
 static void test_mpam_reset_msc_bitmap(struct kunit *test)
 {
        char __iomem *buf = kunit_kzalloc(test, SZ_16K, GFP_KERNEL);
@@ -341,31 +349,31 @@ static void test_mpam_reset_msc_bitmap(struct kunit *test)
 
        test_result = (u32 *)(buf + MPAMCFG_CPBM);
 
-       mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 0);
+       __test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 0);
        KUNIT_EXPECT_EQ(test, test_result[0], 0);
        KUNIT_EXPECT_EQ(test, test_result[1], 0);
        test_result[0] = 0;
        test_result[1] = 0;
 
-       mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 1);
+       __test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 1);
        KUNIT_EXPECT_EQ(test, test_result[0], 1);
        KUNIT_EXPECT_EQ(test, test_result[1], 0);
        test_result[0] = 0;
        test_result[1] = 0;
 
-       mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 16);
+       __test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 16);
        KUNIT_EXPECT_EQ(test, test_result[0], 0xffff);
        KUNIT_EXPECT_EQ(test, test_result[1], 0);
        test_result[0] = 0;
        test_result[1] = 0;
 
-       mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 32);
+       __test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 32);
        KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
        KUNIT_EXPECT_EQ(test, test_result[1], 0);
        test_result[0] = 0;
        test_result[1] = 0;
 
-       mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 33);
+       __test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 33);
        KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
        KUNIT_EXPECT_EQ(test, test_result[1], 1);
        test_result[0] = 0;