[PATCH v3 03/29] ACPI / PPTT: Find cache level by cache-id
Jonathan Cameron
jonathan.cameron at huawei.com
Fri Oct 24 07:15:19 PDT 2025
On Fri, 17 Oct 2025 18:56:19 +0000
James Morse <james.morse at arm.com> wrote:
> The MPAM table identifies caches by id. The MPAM driver also wants to know
> the cache level to determine if the platform is of the shape that can be
> managed via resctrl. Cacheinfo has this information, but only for CPUs that
> are online.
>
> Waiting for all CPUs to come online is a problem for platforms where
> CPUs are brought online late by user-space.
>
> Add a helper that walks every possible cache, until it finds the one
> identified by cache-id, then return the level.
>
> Signed-off-by: James Morse <james.morse at arm.com>
> Reviewed-by: Fenghua Yu <fenghuay at nvidia.com>
> Reviewed-by: Gavin Shan <gshan at redhat.com>
> Tested-by: Fenghua Yu <fenghuay at nvidia.com>
> ---
> Changes sinec v2:
> * Search all caches, not just unified caches. This removes the need to count
> the caches first, but means a failure to find the table walks the table
> three times for different cache types.
Fwiw that sentence doesn't make sense to me. Too many tables.
> * Fixed return value of the no-acpi stub.
> * Punctuation typo in a comment,
> * Keep trying to parse the table even if a bogus CPU is encountered.
> * Specified CPUs share caches with other CPUs.
Trivial comment only from me. Ben's question on matching an ID against an
l1 instruction cache needs addressing (or ruling out as a 'won't fix')
though before an RB is appropriate.
> /**
> * update_cache_properties() - Update cacheinfo for the given processor
> * @this_leaf: Kernel cache info structure being updated
> @@ -903,3 +924,64 @@ void acpi_pptt_get_cpus_from_container(u32 acpi_cpu_id, cpumask_t *cpus)
> entry->length);
> }
> }
> +
> +/*
Smells like kernel doc. Why not /** ?
Then can at least verify formatting etc.
> + * find_acpi_cache_level_from_id() - Get the level of the specified cache
> + * @cache_id: The id field of the cache
> + *
> + * Determine the level relative to any CPU for the cache identified by
> + * cache_id. This allows the property to be found even if the CPUs are offline.
> + *
> + * The returned level can be used to group caches that are peers.
> + *
> + * The PPTT table must be rev 3 or later.
> + *
> + * If one CPU's L2 is shared with another CPU as L3, this function will return
> + * an unpredictable value.
> + *
> + * Return: -ENOENT if the PPTT doesn't exist, the revision isn't supported or
> + * the cache cannot be found.
> + * Otherwise returns a value which represents the level of the specified cache.
> + */
More information about the linux-arm-kernel
mailing list