|
@@ -507,18 +507,19 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
|
|
|
{
|
|
|
struct _cpuid4_info *this_leaf, *sibling_leaf;
|
|
|
unsigned long num_threads_sharing;
|
|
|
- int index_msb, i;
|
|
|
+ int index_msb, i, sibling;
|
|
|
struct cpuinfo_x86 *c = &cpu_data(cpu);
|
|
|
|
|
|
if ((index == 3) && (c->x86_vendor == X86_VENDOR_AMD)) {
|
|
|
- struct cpuinfo_x86 *d;
|
|
|
- for_each_online_cpu(i) {
|
|
|
+ for_each_cpu(i, c->llc_shared_map) {
|
|
|
if (!per_cpu(cpuid4_info, i))
|
|
|
continue;
|
|
|
- d = &cpu_data(i);
|
|
|
this_leaf = CPUID4_INFO_IDX(i, index);
|
|
|
- cpumask_copy(to_cpumask(this_leaf->shared_cpu_map),
|
|
|
- d->llc_shared_map);
|
|
|
+ for_each_cpu(sibling, c->llc_shared_map) {
|
|
|
+ if (!cpu_online(sibling))
|
|
|
+ continue;
|
|
|
+ set_bit(sibling, this_leaf->shared_cpu_map);
|
|
|
+ }
|
|
|
}
|
|
|
return;
|
|
|
}
|