git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This commit was manufactured by cvs2svn to create tag
[linux-2.6.git]
/
arch
/
x86_64
/
kernel
/
smpboot.c
diff --git
a/arch/x86_64/kernel/smpboot.c
b/arch/x86_64/kernel/smpboot.c
index
4d9c47f
..
ba2cba6
100644
(file)
--- a/
arch/x86_64/kernel/smpboot.c
+++ b/
arch/x86_64/kernel/smpboot.c
@@
-73,7
+73,7
@@
struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned;
/* Set when the idlers are all forked */
int smp_threads_ready;
/* Set when the idlers are all forked */
int smp_threads_ready;
-c
har
cpu_sibling_map[NR_CPUS] __cacheline_aligned;
+c
pumask_t
cpu_sibling_map[NR_CPUS] __cacheline_aligned;
/*
* Trampoline 80x86 program as an array.
/*
* Trampoline 80x86 program as an array.
@@
-874,31
+874,38
@@
static void __init smp_boot_cpus(unsigned int max_cpus)
}
/*
}
/*
- *
If Hyper-Threading is avaialble, construct cpu_sibling_map[], so
- *
that we can tell the
sibling CPU efficiently.
+ *
Construct cpu_sibling_map[], so that we can tell the
+ * sibling CPU efficiently.
*/
*/
- if (cpu_has_ht && smp_num_siblings > 1) {
- for (cpu = 0; cpu < NR_CPUS; cpu++)
- cpu_sibling_map[cpu] = NO_PROC_ID;
-
- for (cpu = 0; cpu < NR_CPUS; cpu++) {
-
int
i;
-
if (!cpu_isset(cpu, cpu_callout_map))
-
continue;
+ for (cpu = 0; cpu < NR_CPUS; cpu++)
+ cpus_clear(cpu_sibling_map[cpu]);
+
+ for (cpu = 0; cpu < NR_CPUS; cpu++) {
+ int siblings = 0;
+
int
i;
+ if (!cpu_isset(cpu, cpu_callout_map))
+ continue;
+ if (smp_num_siblings > 1) {
for (i = 0; i < NR_CPUS; i++) {
for (i = 0; i < NR_CPUS; i++) {
- if (
i == cpu ||
!cpu_isset(i, cpu_callout_map))
+ if (!cpu_isset(i, cpu_callout_map))
continue;
if (phys_proc_id[cpu] == phys_proc_id[i]) {
continue;
if (phys_proc_id[cpu] == phys_proc_id[i]) {
-
cpu_sibling_map[cpu] = i
;
-
break
;
+
siblings++
;
+
cpu_set(i, cpu_sibling_map[cpu])
;
}
}
}
}
- if (cpu_sibling_map[cpu] == (char)NO_PROC_ID) {
- smp_num_siblings = 1;
- printk(KERN_WARNING "WARNING: No sibling found for CPU %d.\n", cpu);
- }
+ } else {
+ siblings++;
+ cpu_set(cpu, cpu_sibling_map[cpu]);
}
}
+
+ if (siblings != smp_num_siblings) {
+ printk(KERN_WARNING
+ "WARNING: %d siblings found for CPU%d, should be %d\n",
+ siblings, cpu, smp_num_siblings);
+ smp_num_siblings = siblings;
+ }
}
Dprintk("Boot done.\n");
}
Dprintk("Boot done.\n");