Skip to content

Commit c1376f1

Browse files
benhor01willdeacon
authored andcommitted
arm_mpam: Disable preemption when making accesses to fake MSC in kunit test
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>
1 parent 4ad79c8 commit c1376f1

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

drivers/resctrl/test_mpam_devices.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,14 @@ static void test_mpam_enable_merge_features(struct kunit *test)
322322
mutex_unlock(&mpam_list_lock);
323323
}
324324

325+
static void __test_mpam_reset_msc_bitmap(struct mpam_msc *msc, u16 reg, u16 wd)
326+
{
327+
/* Avoid warnings when running with CONFIG_DEBUG_PREEMPT */
328+
guard(preempt)();
329+
330+
mpam_reset_msc_bitmap(msc, reg, wd);
331+
}
332+
325333
static void test_mpam_reset_msc_bitmap(struct kunit *test)
326334
{
327335
char __iomem *buf = kunit_kzalloc(test, SZ_16K, GFP_KERNEL);
@@ -341,31 +349,31 @@ static void test_mpam_reset_msc_bitmap(struct kunit *test)
341349

342350
test_result = (u32 *)(buf + MPAMCFG_CPBM);
343351

344-
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 0);
352+
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 0);
345353
KUNIT_EXPECT_EQ(test, test_result[0], 0);
346354
KUNIT_EXPECT_EQ(test, test_result[1], 0);
347355
test_result[0] = 0;
348356
test_result[1] = 0;
349357

350-
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 1);
358+
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 1);
351359
KUNIT_EXPECT_EQ(test, test_result[0], 1);
352360
KUNIT_EXPECT_EQ(test, test_result[1], 0);
353361
test_result[0] = 0;
354362
test_result[1] = 0;
355363

356-
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 16);
364+
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 16);
357365
KUNIT_EXPECT_EQ(test, test_result[0], 0xffff);
358366
KUNIT_EXPECT_EQ(test, test_result[1], 0);
359367
test_result[0] = 0;
360368
test_result[1] = 0;
361369

362-
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 32);
370+
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 32);
363371
KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
364372
KUNIT_EXPECT_EQ(test, test_result[1], 0);
365373
test_result[0] = 0;
366374
test_result[1] = 0;
367375

368-
mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 33);
376+
__test_mpam_reset_msc_bitmap(&fake_msc, MPAMCFG_CPBM, 33);
369377
KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
370378
KUNIT_EXPECT_EQ(test, test_result[1], 1);
371379
test_result[0] = 0;

0 commit comments

Comments
 (0)