From: Ingo Molnar Date: Sat, 31 Jan 2009 16:32:31 +0000 (+0100) Subject: Merge branch 'x86/urgent' into x86/apic X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=9d45cf9e36bf9bcf16df6e1cbf049807c8402823;p=linux-beck.git Merge branch 'x86/urgent' into x86/apic Conflicts: arch/x86/mach-default/setup.c Semantic merge: arch/x86/kernel/irqinit_32.c Signed-off-by: Ingo Molnar --- 9d45cf9e36bf9bcf16df6e1cbf049807c8402823 diff --cc arch/x86/kernel/entry_64.S index 82801fd2e931,a1346217e43c..1f7d697b5c00 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@@ -342,11 -341,12 +342,12 @@@ ENTRY(save_args * a little cheaper to use a separate counter in the PDA (short of * moving irq_enter into assembly, which would be too much work) */ -1: incl %gs:pda_irqcount +1: incl PER_CPU_VAR(irq_count) jne 2f popq_cfi %rax /* move return address... */ - mov %gs:pda_irqstackptr,%rsp + mov PER_CPU_VAR(irq_stack_ptr),%rsp EMPTY_FRAME 0 + pushq_cfi %rbp /* backlink for unwinder */ pushq_cfi %rax /* ... to the new stack */ /* * We entered an interrupt context - irqs are off: diff --cc arch/x86/mach-voyager/voyager_smp.c index 331cd6d56483,7ffcdeec4631..328cb0ce62f0 --- a/arch/x86/mach-voyager/voyager_smp.c +++ b/arch/x86/mach-voyager/voyager_smp.c @@@ -1746,12 -1745,14 +1744,13 @@@ static void __init voyager_smp_prepare_ static void __cpuinit voyager_smp_prepare_boot_cpu(void) { - init_gdt(smp_processor_id()); switch_to_new_gdt(); - cpu_set(smp_processor_id(), cpu_online_map); - cpu_set(smp_processor_id(), cpu_callout_map); - cpu_set(smp_processor_id(), cpu_possible_map); - cpu_set(smp_processor_id(), cpu_present_map); + cpu_online_map = cpumask_of_cpu(smp_processor_id()); + cpu_callout_map = cpumask_of_cpu(smp_processor_id()); + cpu_callin_map = CPU_MASK_NONE; + cpu_present_map = cpumask_of_cpu(smp_processor_id()); + } static int __cpuinit voyager_cpu_up(unsigned int cpu) @@@ -1778,11 -1779,12 +1777,11 @@@ static void __init voyager_smp_cpus_don void __init smp_setup_processor_id(void) { current_thread_info()->cpu = hard_smp_processor_id(); - x86_write_percpu(cpu_number, hard_smp_processor_id()); } - static void voyager_send_call_func(cpumask_t callmask) + static void voyager_send_call_func(const struct cpumask *callmask) { - __u32 mask = cpus_addr(callmask)[0] & ~(1 << smp_processor_id()); + __u32 mask = cpus_addr(*callmask)[0] & ~(1 << smp_processor_id()); send_CPI(mask, VIC_CALL_FUNCTION_CPI); } diff --cc kernel/irq/numa_migrate.c index 666260e4c065,acd88356ac76..7f9b80434e32 --- a/kernel/irq/numa_migrate.c +++ b/kernel/irq/numa_migrate.c @@@ -95,8 -81,10 +95,9 @@@ static struct irq_desc *__real_move_irq desc = old_desc; goto out_unlock; } - init_copy_one_irq_desc(irq, old_desc, desc, cpu); irq_desc_ptrs[irq] = desc; + spin_unlock_irqrestore(&sparse_irq_lock, flags); /* free the old one */ free_one_irq_desc(old_desc, desc);