Re: [PATCH v5] selftests/resctrl: Skip L3_CAT when no exclusive cache portion exists

From: Reinette Chatre

Date: Thu Sep 03 2026 - 11:57:36 EST


Hi Shuah,

Could you please consider this patch for inclusion into kselftest's "next"?

Thank you very much

Reinette

On 8/20/26 5:39 PM, Richard Cheng wrote:
> L3_CAT requires an exclusive cache portion to test cache allocation.
> This means that the cache portion used by the test can't overlap with
> cache portions into which other agents may allocate.
>
> Some platforms legitimately report every cache portion as shareable,
> leaving no exclusive cache portion for the test and causing L3_CAT to
> fail.
>
> Skip the L3_CAT when the platform has no exclusive cache portion that
> the test can use.
>
> Tested-by: Chen Yu <yu.c.chen@xxxxxxxxx>
> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@xxxxxxxxxxxxxxx>
> Signed-off-by: Richard Cheng <icheng@xxxxxxxxxx>
> ---
> Changelog:
>
> v4 -> v5:
> - Split the patch from the arm64-specific series and post it standalone
> - Reword the commit message
> - Make the code comment and diagnostic platform-neutral and describe the
> exclusive-cache-portion requirement.
>
> Best regards,
> Richard Cheng.
> ---
> tools/testing/selftests/resctrl/cat_test.c | 23 +++++++++++++++++++++-
> 1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/resctrl/cat_test.c b/tools/testing/selftests/resctrl/cat_test.c
> index 371a2f26dc47..0a417267dd74 100644
> --- a/tools/testing/selftests/resctrl/cat_test.c
> +++ b/tools/testing/selftests/resctrl/cat_test.c
> @@ -357,11 +357,32 @@ static bool noncont_cat_feature_check(const struct resctrl_test *test)
> return resource_info_file_exists(test->resource, "sparse_masks");
> }
>
> +static bool cat_feature_check(const struct resctrl_test *test)
> +{
> + unsigned long mask;
> +
> + if (!test_resource_feature_check(test))
> + return false;
> +
> + /*
> + * Test requires an exclusive cache portion. Some platforms may
> + * legitimately report all bits as shareable, skip the test if that
> + * is the case.
> + */
> + if (get_mask_no_shareable(test->resource, &mask)) {
> + ksft_print_msg("All %s bits are shareable, test requires an exclusive cache portion\n",
> + test->resource);
> + return false;
> + }
> +
> + return true;
> +}
> +
> struct resctrl_test l3_cat_test = {
> .name = "L3_CAT",
> .group = "CAT",
> .resource = "L3",
> - .feature_check = test_resource_feature_check,
> + .feature_check = cat_feature_check,
> .run_test = cat_run_test,
> .cleanup = cat_test_cleanup,
> };
>
> base-commit: a4ff2be345d0abc943da8dd8da98151843b750dc