aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-i386
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy@goop.org>2006-12-06 20:14:02 -0500
committerAndi Kleen <andi@basil.nowhere.org>2006-12-06 20:14:02 -0500
commit62111195800d80c66cdc69063ea3145878c99fbf (patch)
tree35bc9792b3ac232e70e106ff2f4c0193c3bb72ff /include/asm-i386
parent9ca36101a8d74704d78f10910f89d62de96f9dc8 (diff)
[PATCH] i386: Initialize the per-CPU data area
When a CPU is brought up, a PDA and GDT are allocated for it. The GDT's __KERNEL_PDA entry is pointed to the allocated PDA memory, so that all references using this segment descriptor will refer to the PDA. This patch rearranges CPU initialization a bit, so that the GDT/PDA are set up as early as possible in cpu_init(). Also for secondary CPUs, GDT+PDA are preallocated and initialized so all the secondary CPU needs to do is set up the ldt and load %gs. This will be important once smp_processor_id() and current use the PDA. In all cases, the PDA is set up in head.S, before a CPU starts running C code, so the PDA is always available. Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Chuck Ebbert <76306.1226@compuserve.com> Cc: Zachary Amsden <zach@vmware.com> Cc: Jan Beulich <jbeulich@novell.com> Cc: Andi Kleen <ak@suse.de> Cc: James Bottomley <James.Bottomley@SteelEye.com> Cc: Matt Tolentino <matthew.e.tolentino@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org>
Diffstat (limited to 'include/asm-i386')
-rw-r--r--include/asm-i386/processor.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/asm-i386/processor.h b/include/asm-i386/processor.h
index e0ddca94d50c..a9f2041c7c87 100644
--- a/include/asm-i386/processor.h
+++ b/include/asm-i386/processor.h
@@ -727,4 +727,7 @@ extern unsigned long boot_option_idle_override;
727extern void enable_sep_cpu(void); 727extern void enable_sep_cpu(void);
728extern int sysenter_setup(void); 728extern int sysenter_setup(void);
729 729
730extern int init_gdt(int cpu, struct task_struct *idle);
731extern void secondary_cpu_init(void);
732
730#endif /* __ASM_I386_PROCESSOR_H */ 733#endif /* __ASM_I386_PROCESSOR_H */