Re: [PATCH v2 26/45] arm_mpam: resctrl: Add kunit test for control format conversions

Jonathan Cameron
2026-01-06T12:30:43Z

On Fri, 19 Dec 2025 18:11:28 +0000
Ben Horgan <ben.horgan@arm.com> wrote:

> From: Dave Martin <Dave.Martin@arm.com>
>
> resctrl specifies the format of the control schemes, and these don't match
> the hardware.
>
> Some of the conversions are a bit hairy - add some kunit tests.
>
> Signed-off-by: Dave Martin <Dave.Martin@arm.com>
> [morse: squashed enough of Dave's fixes in here that it's his patch now!]
> Signed-off-by: James Morse <james.morse@arm.com>
> Signed-off-by: Ben Horgan <ben.horgan@arm.com>
I took a fairly quick look at these and they seem sane.
Very valuable to have these tests.

Trivial stuff below and a request to carry the reference over to the
code rather than just having it in the tests.

Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>

> diff --git a/drivers/resctrl/test_mpam_resctrl.c b/drivers/resctrl/test_mpam_resctrl.c
> new file mode 100644
> index 000000000000..d0615aa7671c
> --- /dev/null
> +++ b/drivers/resctrl/test_mpam_resctrl.c

> +/*
> + * Mysterious inscriptions taken from ARM DDI 0598D.b,
> + * "Arm Architecture Reference Manual Supplement - Memory System
> + * Resource Partitioning and Monitoring (MPAM), for A-profile
> + * architecture", Section 9.8, "About the fixed-point fractional
> + * format" (exact percentage entries only):

This is the reference I'd like alongside the conversion code.

> + */
> +static const struct percent_value_case percent_value_cases[] = {
> + /* Architectural cases: */
> + { 1, 8, 1 }, { 1, 12, 0x27 }, { 1, 16, 0x28e },
> + { 25, 8, 0x3f }, { 25, 12, 0x3ff }, { 25, 16, 0x3fff },
> + { 35, 8, 0x58 }, { 35, 12, 0x598 }, { 35, 16, 0x5998 },
> + { 45, 8, 0x72 }, { 45, 12, 0x732 }, { 45, 16, 0x7332 },
> + { 50, 8, 0x7f }, { 50, 12, 0x7ff }, { 50, 16, 0x7fff },
> + { 52, 8, 0x84 }, { 52, 12, 0x850 }, { 52, 16, 0x851d },
> + { 55, 8, 0x8b }, { 55, 12, 0x8cb }, { 55, 16, 0x8ccb },
> + { 58, 8, 0x93 }, { 58, 12, 0x946 }, { 58, 16, 0x9479 },
> + { 75, 8, 0xbf }, { 75, 12, 0xbff }, { 75, 16, 0xbfff },
> + { 88, 8, 0xe0 }, { 88, 12, 0xe13 }, { 88, 16, 0xe146 },
> + { 95, 8, 0xf2 }, { 95, 12, 0xf32 }, { 95, 16, 0xf332 },
> + { 100, 8, 0xff }, { 100, 12, 0xfff }, { 100, 16, 0xffff },
> +
This blank line doesn't add anything.

> +};
> +
> +static void test_percent_value_desc(const struct percent_value_case *param,
> + char *desc)
> +{
> + snprintf(desc, KUNIT_PARAM_DESC_SIZE,
> + "pc=%d, width=%d, value=0x%.*x\n",
> + param->pc, param->width,
> + DIV_ROUND_UP(param->width, 4), param->value);
> +}