Merge branch 'x86/mm' into core/percpu
[linux-2.6] / arch / x86 / kernel / smpcommon.c
1 /*
2  * SMP stuff which is common to all sub-architectures.
3  */
4 #include <linux/module.h>
5 #include <asm/smp.h>
6 #include <asm/sections.h>
7
8 #ifdef CONFIG_X86_64
9 DEFINE_PER_CPU(unsigned long, this_cpu_off) = (unsigned long)__per_cpu_load;
10 #else
11 DEFINE_PER_CPU(unsigned long, this_cpu_off);
12 #endif
13 EXPORT_PER_CPU_SYMBOL(this_cpu_off);
14
15 #ifdef CONFIG_X86_32
16 /*
17  * Initialize the CPU's GDT.  This is either the boot CPU doing itself
18  * (still using the master per-cpu area), or a CPU doing it for a
19  * secondary which will soon come up.
20  */
21 __cpuinit void init_gdt(int cpu)
22 {
23         struct desc_struct gdt;
24
25         pack_descriptor(&gdt, __per_cpu_offset[cpu], 0xFFFFF,
26                         0x2 | DESCTYPE_S, 0x8);
27         gdt.s = 1;
28
29         write_gdt_entry(get_cpu_gdt_table(cpu),
30                         GDT_ENTRY_PERCPU, &gdt, DESCTYPE_S);
31 }
32 #endif