summaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorRadu Rendec <rrendec@redhat.com>2023-04-12 14:57:59 -0400
committerSudeep Holla <sudeep.holla@arm.com>2023-04-13 09:32:33 +0100
commite103d55465db06c5344201fd5fa11bb19bc479c5 (patch)
tree0b8491b73382e6fc607fea1d1c98021d719847d4 /drivers/base
parentc931680cfa958c8fe9ace31a1dbeefff75597d54 (diff)
downloadlinux-e103d55465db06c5344201fd5fa11bb19bc479c5.tar.gz
linux-e103d55465db06c5344201fd5fa11bb19bc479c5.tar.bz2
linux-e103d55465db06c5344201fd5fa11bb19bc479c5.zip
cacheinfo: Allow early level detection when DT/ACPI info is missing/broken
Recent work enables cacheinfo memory for secondary CPUs to be allocated early, while still running on the primary CPU. That allows cacheinfo memory to be allocated safely on RT kernels. To make that work, the number of cache levels/leaves must be defined in the device tree or ACPI tables. Further work adds a path for early detection of the number of cache levels/leaves, which makes it possible to allocate the cacheinfo memory early without requiring extra DT/ACPI information. This patch addresses a specific issue with ACPI systems with no PPTT. In that case, parse_acpi_topology() returns an error code, which in turn makes init_cpu_topology() return early, before fetch_cache_info() is called. In that case, the early cache level detection doesn't run. The solution is to simply remove the "return" statement and let the code flow fall through to calling fetch_cache_info(). Signed-off-by: Radu Rendec <rrendec@redhat.com> Reported-by: Pierre Gondois <pierre.gondois@arm.com> Link: https://lore.kernel.org/all/dea94484-797f-3034-7b86-6d88801c0d91@arm.com/ Reviewed-by: Pierre Gondois <pierre.gondois@arm.com> Link: https://lore.kernel.org/r/20230412185759.755408-4-rrendec@redhat.com Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/arch_topology.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index b1c1dd38ab01..147fb7d4af96 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -835,10 +835,10 @@ void __init init_cpu_topology(void)
if (ret) {
/*
* Discard anything that was parsed if we hit an error so we
- * don't use partial information.
+ * don't use partial information. But do not return yet to give
+ * arch-specific early cache level detection a chance to run.
*/
reset_cpu_topology();
- return;
}
for_each_possible_cpu(cpu) {