|
@@ -51,6 +51,8 @@ cpumask_t cpu_online_map __read_mostly = CPU_MASK_NONE;
|
|
cpumask_t phys_cpu_present_map __read_mostly = CPU_MASK_NONE;
|
|
cpumask_t phys_cpu_present_map __read_mostly = CPU_MASK_NONE;
|
|
cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly =
|
|
cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly =
|
|
{ [0 ... NR_CPUS-1] = CPU_MASK_NONE };
|
|
{ [0 ... NR_CPUS-1] = CPU_MASK_NONE };
|
|
|
|
+cpumask_t cpu_core_map[NR_CPUS] __read_mostly =
|
|
|
|
+ { [0 ... NR_CPUS-1] = CPU_MASK_NONE };
|
|
static cpumask_t smp_commenced_mask;
|
|
static cpumask_t smp_commenced_mask;
|
|
static cpumask_t cpu_callout_map;
|
|
static cpumask_t cpu_callout_map;
|
|
|
|
|
|
@@ -1217,13 +1219,28 @@ void __devinit smp_fill_in_sib_core_maps(void)
|
|
unsigned int j;
|
|
unsigned int j;
|
|
|
|
|
|
if (cpu_data(i).core_id == 0) {
|
|
if (cpu_data(i).core_id == 0) {
|
|
- cpu_set(i, cpu_sibling_map[i]);
|
|
|
|
|
|
+ cpu_set(i, cpu_core_map[i]);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
for_each_possible_cpu(j) {
|
|
for_each_possible_cpu(j) {
|
|
if (cpu_data(i).core_id ==
|
|
if (cpu_data(i).core_id ==
|
|
cpu_data(j).core_id)
|
|
cpu_data(j).core_id)
|
|
|
|
+ cpu_set(j, cpu_core_map[i]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for_each_possible_cpu(i) {
|
|
|
|
+ unsigned int j;
|
|
|
|
+
|
|
|
|
+ if (cpu_data(i).proc_id == -1) {
|
|
|
|
+ cpu_set(i, cpu_sibling_map[i]);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for_each_possible_cpu(j) {
|
|
|
|
+ if (cpu_data(i).proc_id ==
|
|
|
|
+ cpu_data(j).proc_id)
|
|
cpu_set(j, cpu_sibling_map[i]);
|
|
cpu_set(j, cpu_sibling_map[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|