diff options
Diffstat (limited to 'arch/x86/xen/smp.c')
-rw-r--r-- | arch/x86/xen/smp.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 7735e3dd359c..035582ae815d 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
@@ -170,7 +170,7 @@ static void __init xen_smp_prepare_boot_cpu(void) | |||
170 | 170 | ||
171 | /* We've switched to the "real" per-cpu gdt, so make sure the | 171 | /* We've switched to the "real" per-cpu gdt, so make sure the |
172 | old memory can be recycled */ | 172 | old memory can be recycled */ |
173 | make_lowmem_page_readwrite(&per_cpu_var(gdt_page)); | 173 | make_lowmem_page_readwrite(xen_initial_gdt); |
174 | 174 | ||
175 | xen_setup_vcpu_info_placement(); | 175 | xen_setup_vcpu_info_placement(); |
176 | } | 176 | } |
@@ -235,6 +235,8 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle) | |||
235 | ctxt->user_regs.ss = __KERNEL_DS; | 235 | ctxt->user_regs.ss = __KERNEL_DS; |
236 | #ifdef CONFIG_X86_32 | 236 | #ifdef CONFIG_X86_32 |
237 | ctxt->user_regs.fs = __KERNEL_PERCPU; | 237 | ctxt->user_regs.fs = __KERNEL_PERCPU; |
238 | #else | ||
239 | ctxt->gs_base_kernel = per_cpu_offset(cpu); | ||
238 | #endif | 240 | #endif |
239 | ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle; | 241 | ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle; |
240 | ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */ | 242 | ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */ |
@@ -284,6 +286,9 @@ static int __cpuinit xen_cpu_up(unsigned int cpu) | |||
284 | irq_ctx_init(cpu); | 286 | irq_ctx_init(cpu); |
285 | #else | 287 | #else |
286 | clear_tsk_thread_flag(idle, TIF_FORK); | 288 | clear_tsk_thread_flag(idle, TIF_FORK); |
289 | per_cpu(kernel_stack, cpu) = | ||
290 | (unsigned long)task_stack_page(idle) - | ||
291 | KERNEL_STACK_OFFSET + THREAD_SIZE; | ||
287 | #endif | 292 | #endif |
288 | xen_setup_timer(cpu); | 293 | xen_setup_timer(cpu); |
289 | xen_init_lock_cpu(cpu); | 294 | xen_init_lock_cpu(cpu); |