smpcommon.c 729 字节
Newer Older
G
Glauber Costa 已提交
1 2 3 4 5 6 7 8 9 10
/*
 * SMP stuff which is common to all sub-architectures.
 */
#include <linux/module.h>
#include <asm/smp.h>

#ifdef CONFIG_X86_32
DEFINE_PER_CPU(unsigned long, this_cpu_off);
EXPORT_PER_CPU_SYMBOL(this_cpu_off);

11 12 13 14 15
/*
 * Initialize the CPU's GDT.  This is either the boot CPU doing itself
 * (still using the master per-cpu area), or a CPU doing it for a
 * secondary which will soon come up.
 */
G
Glauber Costa 已提交
16 17
__cpuinit void init_gdt(int cpu)
{
18
	struct desc_struct gdt;
G
Glauber Costa 已提交
19

20
	pack_descriptor(&gdt, __per_cpu_offset[cpu], 0xFFFFF,
G
Glauber Costa 已提交
21
			0x2 | DESCTYPE_S, 0x8);
22
	gdt.s = 1;
G
Glauber Costa 已提交
23

24 25
	write_gdt_entry(get_cpu_gdt_table(cpu),
			GDT_ENTRY_PERCPU, &gdt, DESCTYPE_S);
G
Glauber Costa 已提交
26 27 28 29 30

	per_cpu(this_cpu_off, cpu) = __per_cpu_offset[cpu];
	per_cpu(cpu_number, cpu) = cpu;
}
#endif