X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fpowerpc%2Fkernel%2Fsmp.c;fp=arch%2Fpowerpc%2Fkernel%2Fsmp.c;h=13595a64f013a2c1b31f2ce0d7cf86be2b1c3ae9;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=6a9bc9ce54e0a2304d5a590659822f95e4aad98a;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 6a9bc9ce5..13595a64f 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -17,6 +17,7 @@ #undef DEBUG +#include #include #include #include @@ -144,15 +145,13 @@ void smp_message_recv(int msg, struct pt_regs *regs) void smp_send_reschedule(int cpu) { - if (likely(smp_ops)) - smp_ops->message_pass(cpu, PPC_MSG_RESCHEDULE); + smp_ops->message_pass(cpu, PPC_MSG_RESCHEDULE); } #ifdef CONFIG_DEBUGGER void smp_send_debugger_break(int cpu) { - if (likely(smp_ops)) - smp_ops->message_pass(cpu, PPC_MSG_DEBUGGER_BREAK); + smp_ops->message_pass(cpu, PPC_MSG_DEBUGGER_BREAK); } #endif @@ -160,7 +159,7 @@ void smp_send_debugger_break(int cpu) void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *)) { crash_ipi_function_ptr = crash_ipi_callback; - if (crash_ipi_callback && smp_ops) { + if (crash_ipi_callback) { mb(); smp_ops->message_pass(MSG_ALL_BUT_SELF, PPC_MSG_DEBUGGER_BREAK); } @@ -222,9 +221,6 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic, /* Can deadlock when called with interrupts disabled */ WARN_ON(irqs_disabled()); - if (unlikely(smp_ops == NULL)) - return -1; - data.func = func; data.info = info; atomic_set(&data.started, 0); @@ -362,14 +358,11 @@ void __init smp_prepare_cpus(unsigned int max_cpus) smp_store_cpu_info(boot_cpuid); cpu_callin_map[boot_cpuid] = 1; - if (smp_ops) - max_cpus = smp_ops->probe(); - else - max_cpus = 1; + max_cpus = smp_ops->probe(); smp_space_timers(max_cpus); - for_each_possible_cpu(cpu) + for_each_cpu(cpu) if (cpu != boot_cpuid) smp_create_idle(cpu); } @@ -461,7 +454,7 @@ void generic_mach_cpu_die(void) static int __devinit cpu_enable(unsigned int cpu) { - if (smp_ops && smp_ops->cpu_enable) + if (smp_ops->cpu_enable) return smp_ops->cpu_enable(cpu); return -ENOSYS; @@ -475,8 +468,7 @@ int __devinit __cpu_up(unsigned int cpu) if (!cpu_enable(cpu)) return 0; - if (smp_ops == NULL || - (smp_ops->cpu_bootable && !smp_ops->cpu_bootable(cpu))) + if (smp_ops->cpu_bootable && !smp_ops->cpu_bootable(cpu)) return -EINVAL; /* Make sure callin-map entry is 0 (can be leftover a CPU @@ -500,7 +492,7 @@ int __devinit __cpu_up(unsigned int cpu) * -- Cort */ if (system_state < SYSTEM_RUNNING) - for (c = 50000; c && !cpu_callin_map[cpu]; c--) + for (c = 5000; c && !cpu_callin_map[cpu]; c--) udelay(100); #ifdef CONFIG_HOTPLUG_CPU else @@ -549,7 +541,7 @@ int __devinit start_secondary(void *unused) smp_ops->take_timebase(); if (system_state > SYSTEM_BOOTING) - snapshot_timebase(); + per_cpu(last_jiffy, cpu) = get_tb(); spin_lock(&call_lock); cpu_set(cpu, cpu_online_map); @@ -577,13 +569,10 @@ void __init smp_cpus_done(unsigned int max_cpus) old_mask = current->cpus_allowed; set_cpus_allowed(current, cpumask_of_cpu(boot_cpuid)); - if (smp_ops) - smp_ops->setup_cpu(boot_cpuid); + smp_ops->setup_cpu(boot_cpuid); set_cpus_allowed(current, old_mask); - snapshot_timebases(); - dump_numa_cpu_topology(); }