Merge branch 'tj-percpu' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/misc...
authorIngo Molnar <mingo@elte.hu>
Tue, 27 Jan 2009 11:03:24 +0000 (12:03 +0100)
committerIngo Molnar <mingo@elte.hu>
Tue, 27 Jan 2009 11:03:24 +0000 (12:03 +0100)
Conflicts:
arch/x86/kernel/setup_percpu.c

Semantic conflict:

arch/x86/kernel/cpu/common.c

Signed-off-by: Ingo Molnar <mingo@elte.hu>
1  2 
arch/x86/kernel/cpu/common.c

index 99904f288d6ac29d51ab060253b63f243e184b0c,0c766b80d9156b662238e4f96f9dee1ec42db92a..652fdc9a757a22d61a8222f3ec54c5d1d62c71fb
@@@ -52,6 -52,15 +52,15 @@@ cpumask_var_t cpu_initialized_mask
  /* representing cpus for which sibling maps can be computed */
  cpumask_var_t cpu_sibling_setup_mask;
  
 -void setup_cpu_local_masks(void)
+ /* correctly size the local cpu masks */
++void __init setup_cpu_local_masks(void)
+ {
+       alloc_bootmem_cpumask_var(&cpu_initialized_mask);
+       alloc_bootmem_cpumask_var(&cpu_callin_mask);
+       alloc_bootmem_cpumask_var(&cpu_callout_mask);
+       alloc_bootmem_cpumask_var(&cpu_sibling_setup_mask);
+ }
  #else /* CONFIG_X86_32 */
  
  cpumask_t cpu_callin_map;
@@@ -249,12 -258,17 +258,17 @@@ __u32 cleared_cpu_caps[NCAPINTS] __cpui
  void switch_to_new_gdt(void)
  {
        struct desc_ptr gdt_descr;
+       int cpu = smp_processor_id();
  
-       gdt_descr.address = (long)get_cpu_gdt_table(smp_processor_id());
+       gdt_descr.address = (long)get_cpu_gdt_table(cpu);
        gdt_descr.size = GDT_SIZE - 1;
        load_gdt(&gdt_descr);
+       /* Reload the per-cpu base */
  #ifdef CONFIG_X86_32
-       asm("mov %0, %%fs" : : "r" (__KERNEL_PERCPU) : "memory");
+       loadsegment(fs, __KERNEL_PERCPU);
+ #else
+       loadsegment(gs, 0);
+       wrmsrl(MSR_GS_BASE, (unsigned long)per_cpu(irq_stack_union.gs_base, cpu));
  #endif
  }
  
@@@ -959,10 -973,6 +973,6 @@@ void __cpuinit cpu_init(void
        struct task_struct *me;
        int i;
  
-       loadsegment(fs, 0);
-       loadsegment(gs, 0);
-       load_gs_base(cpu);
  #ifdef CONFIG_NUMA
        if (cpu != 0 && percpu_read(node_number) == 0 &&
            cpu_to_node(cpu) != NUMA_NO_NODE)
         */
  
        switch_to_new_gdt();
+       loadsegment(fs, 0);
        load_idt((const struct desc_ptr *)&idt_descr);
  
        memset(me->thread.tls_array, 0, GDT_ENTRY_TLS_ENTRIES * 8);
This page took 0.045018 seconds and 5 git commands to generate.