Skip to content

Commit 5c27123

Browse files
Yicong Yanggregkh
Yicong Yang
authored andcommitted
cacheinfo: Fix LLC is not exported through sysfs
After entering 6.3-rc1 the LLC cacheinfo is not exported on our ACPI based arm64 server. This is because the LLC cacheinfo is partly reset when secondary CPUs boot up. On arm64 the primary cpu will allocate and setup cacheinfo: init_cpu_topology() for_each_possible_cpu() fetch_cache_info() // Allocate cacheinfo and init levels detect_cache_attributes() cache_shared_cpu_map_setup() if (!last_level_cache_is_valid()) // not valid, setup LLC cache_setup_properties() // setup LLC On secondary CPU boot up: detect_cache_attributes() populate_cache_leaves() get_cache_type() // Get cache type from clidr_el1, // for LLC type=CACHE_TYPE_NOCACHE cache_shared_cpu_map_setup() if (!last_level_cache_is_valid()) // Valid and won't go to this branch, // leave LLC's type=CACHE_TYPE_NOCACHE The last_level_cache_is_valid() use cacheinfo->{attributes, fw_token} to test it's valid or not, but populate_cache_leaves() will only reset LLC's type, so we won't try to re-setup LLC's type and leave it CACHE_TYPE_NOCACHE and won't export it through sysfs. This patch tries to fix this by not re-populating the cache leaves if the LLC is valid. Fixes: 5944ce0 ("arch_topology: Build cacheinfo from primary CPU") Signed-off-by: Yicong Yang <[email protected]> Reviewed-by: Pierre Gondois <[email protected]> Reviewed-by: Sudeep Holla <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 44ac5ab commit 5c27123

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

drivers/base/cacheinfo.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -474,12 +474,18 @@ int detect_cache_attributes(unsigned int cpu)
474474

475475
populate_leaves:
476476
/*
477-
* populate_cache_leaves() may completely setup the cache leaves and
478-
* shared_cpu_map or it may leave it partially setup.
477+
* If LLC is valid the cache leaves were already populated so just go to
478+
* update the cpu map.
479479
*/
480-
ret = populate_cache_leaves(cpu);
481-
if (ret)
482-
goto free_ci;
480+
if (!last_level_cache_is_valid(cpu)) {
481+
/*
482+
* populate_cache_leaves() may completely setup the cache leaves and
483+
* shared_cpu_map or it may leave it partially setup.
484+
*/
485+
ret = populate_cache_leaves(cpu);
486+
if (ret)
487+
goto free_ci;
488+
}
483489

484490
/*
485491
* For systems using DT for cache hierarchy, fw_token

0 commit comments

Comments
 (0)