Skip to content

Commit ddc6a6e

Browse files
committed
cacheinfo: Add arch hook to compress CPU h/w id into 32 bits for cache-id
JIRA: https://issues.redhat.com/browse/RHEL-109250 commit 9a697ef Author: James Morse <james.morse@arm.com> Date: Wed, 16 Jul 2025 15:04:27 +0000 Filesystems like resctrl use the cache-id exposed via sysfs to identify groups of CPUs. The value is also used for PCIe cache steering tags. On DT platforms cache-id is not something that is described in the device-tree, but instead generated from the smallest CPU h/w id of the CPUs associated with that cache. CPU h/w ids may be larger than 32 bits. Add a hook to allow architectures to compress the value from the devicetree into 32 bits. Returning the same value is always safe as cache_of_set_id() will stop if a value larger than 32 bits is seen. For example, on arm64 the value is the MPIDR affinity register, which only has 32 bits of affinity data, but spread accross the 64 bit field. An arch-specific bit swizzle gives a 32 bit value. Signed-off-by: James Morse <james.morse@arm.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Link: https://lore.kernel.org/r/20250711182743.30141-3-james.morse@arm.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Mark Langsdorf <mlangsdo@redhat.com>
1 parent 8624d9c commit ddc6a6e

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

drivers/base/cacheinfo.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,10 @@ static bool match_cache_node(struct device_node *cpu,
203203
return false;
204204
}
205205

206+
#ifndef arch_compact_of_hwid
207+
#define arch_compact_of_hwid(_x) (_x)
208+
#endif
209+
206210
static void cache_of_set_id(struct cacheinfo *this_leaf,
207211
struct device_node *cache_node)
208212
{
@@ -212,6 +216,7 @@ static void cache_of_set_id(struct cacheinfo *this_leaf,
212216
for_each_of_cpu_node(cpu) {
213217
u64 id = of_get_cpu_hwid(cpu, 0);
214218

219+
id = arch_compact_of_hwid(id);
215220
if (FIELD_GET(GENMASK_ULL(63, 32), id)) {
216221
of_node_put(cpu);
217222
return;

0 commit comments

Comments
 (0)