mirror of https://github.com/torvalds/linux.git
arm_mpam: Add kunit test for bitmap reset
The bitmap reset code has been a source of bugs. Add a unit test. This currently has to be built in, as the rest of the driver is builtin. Suggested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: James Morse <james.morse@arm.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Reviewed-by: Ben Horgan <ben.horgan@arm.com> Reviewed-by: Fenghua Yu <fenghuay@nvidia.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com> Tested-by: Fenghua Yu <fenghuay@nvidia.com> Tested-by: Carl Worth <carl@os.amperecomputing.com> Tested-by: Gavin Shan <gshan@redhat.com> Tested-by: Zeng Heng <zengheng4@huawei.com> Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com> Tested-by: Hanjun Guo <guohanjun@huawei.com> Signed-off-by: Ben Horgan <ben.horgan@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
201d96ca4c
commit
e3565d1fd4
|
|
@ -12,4 +12,13 @@ config ARM64_MPAM_DRIVER_DEBUG
|
|||
help
|
||||
Say yes here to enable debug messages from the MPAM driver.
|
||||
|
||||
config MPAM_KUNIT_TEST
|
||||
bool "KUnit tests for MPAM driver " if !KUNIT_ALL_TESTS
|
||||
depends on KUNIT=y
|
||||
default KUNIT_ALL_TESTS
|
||||
help
|
||||
Enable this option to run tests in the MPAM driver.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
endif
|
||||
|
|
|
|||
|
|
@ -2717,3 +2717,7 @@ static int __init mpam_msc_driver_init(void)
|
|||
|
||||
/* Must occur after arm64_mpam_register_cpus() from arch_initcall() */
|
||||
subsys_initcall(mpam_msc_driver_init);
|
||||
|
||||
#ifdef CONFIG_MPAM_KUNIT_TEST
|
||||
#include "test_mpam_devices.c"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
// Copyright (C) 2025 Arm Ltd.
|
||||
/* This file is intended to be included into mpam_devices.c */
|
||||
|
||||
#include <kunit/test.h>
|
||||
|
||||
static void test_mpam_reset_msc_bitmap(struct kunit *test)
|
||||
{
|
||||
char __iomem *buf = kunit_kzalloc(test, SZ_16K, GFP_KERNEL);
|
||||
struct mpam_msc fake_msc = {};
|
||||
u32 *test_result;
|
||||
|
||||
if (!buf)
|
||||
return;
|
||||
|
||||
fake_msc.mapped_hwpage = buf;
|
||||
fake_msc.mapped_hwpage_sz = SZ_16K;
|
||||
cpumask_copy(&fake_msc.accessibility, cpu_possible_mask);
|
||||
|
||||
/* Satisfy lockdep checks */
|
||||
mutex_init(&fake_msc.part_sel_lock);
|
||||
mutex_lock(&fake_msc.part_sel_lock);
|
||||
|
||||
test_result = (u32 *)(buf + MPAMCFG_CPBM);
|
||||
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
KUNIT_EXPECT_EQ(test, test_result[0], 0xffffffff);
|
||||
KUNIT_EXPECT_EQ(test, test_result[1], 1);
|
||||
test_result[0] = 0;
|
||||
test_result[1] = 0;
|
||||
|
||||
mutex_unlock(&fake_msc.part_sel_lock);
|
||||
}
|
||||
|
||||
static struct kunit_case mpam_devices_test_cases[] = {
|
||||
KUNIT_CASE(test_mpam_reset_msc_bitmap),
|
||||
{}
|
||||
};
|
||||
|
||||
static struct kunit_suite mpam_devices_test_suite = {
|
||||
.name = "mpam_devices_test_suite",
|
||||
.test_cases = mpam_devices_test_cases,
|
||||
};
|
||||
|
||||
kunit_test_suites(&mpam_devices_test_suite);
|
||||
Loading…
Reference in New Issue