Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drivers: base: cacheinfo: fix x86 with CONFIG_OF enabled

With CONFIG_OF enabled on x86, we get the following error on boot:
"
Failed to find cpu0 device node
Unable to detect cache hierarchy from DT for CPU 0
"
and the cacheinfo fails to get populated in the corresponding sysfs
entries. This is because cache_setup_of_node looks for of_node for
setting up the shared cpu_map without checking that it's already
populated in the architecture specific callback.

In order to indicate that the shared cpu_map is already populated, this
patch introduces a boolean `cpu_map_populated` in struct cpu_cacheinfo
that can be used by the generic code to skip cache_shared_cpu_map_setup.

This patch also sets that boolean for x86.

Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Sudeep Holla and committed by
Greg Kroah-Hartman
fac51482 79543cf2

+6
+2
arch/x86/kernel/cpu/intel_cacheinfo.c
··· 934 934 ci_leaf_init(this_leaf++, &id4_regs); 935 935 __cache_cpumap_setup(cpu, idx, &id4_regs); 936 936 } 937 + this_cpu_ci->cpu_map_populated = true; 938 + 937 939 return 0; 938 940 } 939 941
+3
drivers/base/cacheinfo.c
··· 106 106 unsigned int index; 107 107 int ret; 108 108 109 + if (this_cpu_ci->cpu_map_populated) 110 + return 0; 111 + 109 112 ret = cache_setup_of_node(cpu); 110 113 if (ret) 111 114 return ret;
+1
include/linux/cacheinfo.h
··· 71 71 struct cacheinfo *info_list; 72 72 unsigned int num_levels; 73 73 unsigned int num_leaves; 74 + bool cpu_map_populated; 74 75 }; 75 76 76 77 /*