mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
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>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user