54aa994c4b20a1ac79d734666b4945113d3e13ff
[cascardo/linux.git] / arch / arm / kernel / smp.c
1 /*
2  *  linux/arch/arm/kernel/smp.c
3  *
4  *  Copyright (C) 2002 ARM Limited, All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 #include <linux/module.h>
11 #include <linux/delay.h>
12 #include <linux/init.h>
13 #include <linux/spinlock.h>
14 #include <linux/sched.h>
15 #include <linux/interrupt.h>
16 #include <linux/cache.h>
17 #include <linux/profile.h>
18 #include <linux/errno.h>
19 #include <linux/mm.h>
20 #include <linux/err.h>
21 #include <linux/cpu.h>
22 #include <linux/seq_file.h>
23 #include <linux/irq.h>
24 #include <linux/percpu.h>
25 #include <linux/clockchips.h>
26 #include <linux/completion.h>
27 #include <linux/cpufreq.h>
28
29 #include <linux/atomic.h>
30 #include <asm/smp.h>
31 #include <asm/cacheflush.h>
32 #include <asm/cpu.h>
33 #include <asm/cputype.h>
34 #include <asm/exception.h>
35 #include <asm/idmap.h>
36 #include <asm/topology.h>
37 #include <asm/mmu_context.h>
38 #include <asm/pgtable.h>
39 #include <asm/pgalloc.h>
40 #include <asm/processor.h>
41 #include <asm/sections.h>
42 #include <asm/tlbflush.h>
43 #include <asm/ptrace.h>
44 #include <asm/smp_plat.h>
45 #include <asm/virt.h>
46 #include <asm/mach/arch.h>
47
48 /*
49  * as from 2.5, kernels no longer have an init_tasks structure
50  * so we need some other way of telling a new secondary core
51  * where to place its SVC stack
52  */
53 struct secondary_data secondary_data;
54
55 /*
56  * control for which core is the next to come out of the secondary
57  * boot "holding pen"
58  */
59 volatile int __cpuinitdata pen_release = -1;
60
61 enum ipi_msg_type {
62         IPI_WAKEUP,
63         IPI_TIMER,
64         IPI_RESCHEDULE,
65         IPI_CALL_FUNC,
66         IPI_CALL_FUNC_SINGLE,
67         IPI_CPU_STOP,
68 };
69
70 static DECLARE_COMPLETION(cpu_running);
71
72 static struct smp_operations smp_ops;
73
74 void __init smp_set_ops(struct smp_operations *ops)
75 {
76         if (ops)
77                 smp_ops = *ops;
78 };
79
80 int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle)
81 {
82         int ret;
83
84         /*
85          * We need to tell the secondary core where to find
86          * its stack and the page tables.
87          */
88         secondary_data.stack = task_stack_page(idle) + THREAD_START_SP;
89         secondary_data.pgdir = virt_to_phys(idmap_pgd);
90         secondary_data.swapper_pg_dir = virt_to_phys(swapper_pg_dir);
91         __cpuc_flush_dcache_area(&secondary_data, sizeof(secondary_data));
92         outer_clean_range(__pa(&secondary_data), __pa(&secondary_data + 1));
93
94         /*
95          * Now bring the CPU into our world.
96          */
97         ret = boot_secondary(cpu, idle);
98         if (ret == 0) {
99                 /*
100                  * CPU was successfully started, wait for it
101                  * to come online or time out.
102                  */
103                 wait_for_completion_timeout(&cpu_running,
104                                                  msecs_to_jiffies(1000));
105
106                 if (!cpu_online(cpu)) {
107                         pr_crit("CPU%u: failed to come online\n", cpu);
108                         ret = -EIO;
109                 }
110         } else {
111                 pr_err("CPU%u: failed to boot: %d\n", cpu, ret);
112         }
113
114         secondary_data.stack = NULL;
115         secondary_data.pgdir = 0;
116
117         return ret;
118 }
119
120 /* platform specific SMP operations */
121 void __init smp_init_cpus(void)
122 {
123         if (smp_ops.smp_init_cpus)
124                 smp_ops.smp_init_cpus();
125 }
126
127 int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
128 {
129         if (smp_ops.smp_boot_secondary)
130                 return smp_ops.smp_boot_secondary(cpu, idle);
131         return -ENOSYS;
132 }
133
134 #ifdef CONFIG_HOTPLUG_CPU
135 static int platform_cpu_kill(unsigned int cpu)
136 {
137         if (smp_ops.cpu_kill)
138                 return smp_ops.cpu_kill(cpu);
139         return 1;
140 }
141
142 static int platform_cpu_disable(unsigned int cpu)
143 {
144         if (smp_ops.cpu_disable)
145                 return smp_ops.cpu_disable(cpu);
146
147         /*
148          * By default, allow disabling all CPUs except the first one,
149          * since this is special on a lot of platforms, e.g. because
150          * of clock tick interrupts.
151          */
152         return cpu == 0 ? -EPERM : 0;
153 }
154 /*
155  * __cpu_disable runs on the processor to be shutdown.
156  */
157 int __cpuinit __cpu_disable(void)
158 {
159         unsigned int cpu = smp_processor_id();
160         int ret;
161
162         ret = platform_cpu_disable(cpu);
163         if (ret)
164                 return ret;
165
166         /*
167          * Take this CPU offline.  Once we clear this, we can't return,
168          * and we must not schedule until we're ready to give up the cpu.
169          */
170         set_cpu_online(cpu, false);
171
172         /*
173          * OK - migrate IRQs away from this CPU
174          */
175         migrate_irqs();
176
177         /*
178          * Flush user cache and TLB mappings, and then remove this CPU
179          * from the vm mask set of all processes.
180          *
181          * Caches are flushed to the Level of Unification Inner Shareable
182          * to write-back dirty lines to unified caches shared by all CPUs.
183          */
184         flush_cache_louis();
185         local_flush_tlb_all();
186
187         clear_tasks_mm_cpumask(cpu);
188
189         return 0;
190 }
191
192 static DECLARE_COMPLETION(cpu_died);
193
194 /*
195  * called on the thread which is asking for a CPU to be shutdown -
196  * waits until shutdown has completed, or it is timed out.
197  */
198 void __cpuinit __cpu_die(unsigned int cpu)
199 {
200         if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) {
201                 pr_err("CPU%u: cpu didn't die\n", cpu);
202                 return;
203         }
204         printk(KERN_NOTICE "CPU%u: shutdown\n", cpu);
205
206         /*
207          * platform_cpu_kill() is generally expected to do the powering off
208          * and/or cutting of clocks to the dying CPU.  Optionally, this may
209          * be done by the CPU which is dying in preference to supporting
210          * this call, but that means there is _no_ synchronisation between
211          * the requesting CPU and the dying CPU actually losing power.
212          */
213         if (!platform_cpu_kill(cpu))
214                 printk("CPU%u: unable to kill\n", cpu);
215 }
216
217 /*
218  * Called from the idle thread for the CPU which has been shutdown.
219  *
220  * Note that we disable IRQs here, but do not re-enable them
221  * before returning to the caller. This is also the behaviour
222  * of the other hotplug-cpu capable cores, so presumably coming
223  * out of idle fixes this.
224  */
225 void __ref cpu_die(void)
226 {
227         unsigned int cpu = smp_processor_id();
228
229         idle_task_exit();
230
231         local_irq_disable();
232
233         /*
234          * Flush the data out of the L1 cache for this CPU.  This must be
235          * before the completion to ensure that data is safely written out
236          * before platform_cpu_kill() gets called - which may disable
237          * *this* CPU and power down its cache.
238          */
239         flush_cache_louis();
240
241         /*
242          * Tell __cpu_die() that this CPU is now safe to dispose of.  Once
243          * this returns, power and/or clocks can be removed at any point
244          * from this CPU and its cache by platform_cpu_kill().
245          */
246         RCU_NONIDLE(complete(&cpu_died));
247
248         /*
249          * Ensure that the cache lines associated with that completion are
250          * written out.  This covers the case where _this_ CPU is doing the
251          * powering down, to ensure that the completion is visible to the
252          * CPU waiting for this one.
253          */
254         flush_cache_louis();
255
256         /*
257          * The actual CPU shutdown procedure is at least platform (if not
258          * CPU) specific.  This may remove power, or it may simply spin.
259          *
260          * Platforms are generally expected *NOT* to return from this call,
261          * although there are some which do because they have no way to
262          * power down the CPU.  These platforms are the _only_ reason we
263          * have a return path which uses the fragment of assembly below.
264          *
265          * The return path should not be used for platforms which can
266          * power off the CPU.
267          */
268         if (smp_ops.cpu_die)
269                 smp_ops.cpu_die(cpu);
270
271         /*
272          * Do not return to the idle loop - jump back to the secondary
273          * cpu initialisation.  There's some initialisation which needs
274          * to be repeated to undo the effects of taking the CPU offline.
275          */
276         __asm__("mov    sp, %0\n"
277         "       mov     fp, #0\n"
278         "       b       secondary_start_kernel"
279                 :
280                 : "r" (task_stack_page(current) + THREAD_SIZE - 8));
281 }
282 #endif /* CONFIG_HOTPLUG_CPU */
283
284 /*
285  * Called by both boot and secondaries to move global data into
286  * per-processor storage.
287  */
288 static void __cpuinit smp_store_cpu_info(unsigned int cpuid)
289 {
290         struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid);
291
292         cpu_info->loops_per_jiffy = loops_per_jiffy;
293         cpu_info->cpuid = read_cpuid_id();
294
295         store_cpu_topology(cpuid);
296 }
297
298 /*
299  * This is the secondary CPU boot entry.  We're using this CPUs
300  * idle thread stack, but a set of temporary page tables.
301  */
302 asmlinkage void __cpuinit secondary_start_kernel(void)
303 {
304         struct mm_struct *mm = &init_mm;
305         unsigned int cpu;
306
307         /*
308          * The identity mapping is uncached (strongly ordered), so
309          * switch away from it before attempting any exclusive accesses.
310          */
311         cpu_switch_mm(mm->pgd, mm);
312         local_flush_bp_all();
313         enter_lazy_tlb(mm, current);
314         local_flush_tlb_all();
315
316         /*
317          * All kernel threads share the same mm context; grab a
318          * reference and switch to it.
319          */
320         cpu = smp_processor_id();
321         atomic_inc(&mm->mm_count);
322         current->active_mm = mm;
323         cpumask_set_cpu(cpu, mm_cpumask(mm));
324
325         cpu_init();
326
327         printk("CPU%u: Booted secondary processor\n", cpu);
328
329         preempt_disable();
330         trace_hardirqs_off();
331
332         /*
333          * Give the platform a chance to do its own initialisation.
334          */
335         if (smp_ops.smp_secondary_init)
336                 smp_ops.smp_secondary_init(cpu);
337
338         notify_cpu_starting(cpu);
339
340         calibrate_delay();
341
342         smp_store_cpu_info(cpu);
343
344         /*
345          * OK, now it's safe to let the boot CPU continue.  Wait for
346          * the CPU migration code to notice that the CPU is online
347          * before we continue - which happens after __cpu_up returns.
348          */
349         set_cpu_online(cpu, true);
350         complete(&cpu_running);
351
352         local_irq_enable();
353         local_fiq_enable();
354
355         /*
356          * OK, it's off to the idle thread for us
357          */
358         cpu_startup_entry(CPUHP_ONLINE);
359 }
360
361 void __init smp_cpus_done(unsigned int max_cpus)
362 {
363         int cpu;
364         unsigned long bogosum = 0;
365
366         for_each_online_cpu(cpu)
367                 bogosum += per_cpu(cpu_data, cpu).loops_per_jiffy;
368
369         printk(KERN_INFO "SMP: Total of %d processors activated "
370                "(%lu.%02lu BogoMIPS).\n",
371                num_online_cpus(),
372                bogosum / (500000/HZ),
373                (bogosum / (5000/HZ)) % 100);
374
375         hyp_mode_check();
376 }
377
378 void __init smp_prepare_boot_cpu(void)
379 {
380         set_my_cpu_offset(per_cpu_offset(smp_processor_id()));
381 }
382
383 void __init smp_prepare_cpus(unsigned int max_cpus)
384 {
385         unsigned int ncores = num_possible_cpus();
386
387         init_cpu_topology();
388
389         smp_store_cpu_info(smp_processor_id());
390
391         /*
392          * are we trying to boot more cores than exist?
393          */
394         if (max_cpus > ncores)
395                 max_cpus = ncores;
396         if (ncores > 1 && max_cpus) {
397                 /*
398                  * Initialise the present map, which describes the set of CPUs
399                  * actually populated at the present time. A platform should
400                  * re-initialize the map in the platforms smp_prepare_cpus()
401                  * if present != possible (e.g. physical hotplug).
402                  */
403                 init_cpu_present(cpu_possible_mask);
404
405                 /*
406                  * Initialise the SCU if there are more than one CPU
407                  * and let them know where to start.
408                  */
409                 if (smp_ops.smp_prepare_cpus)
410                         smp_ops.smp_prepare_cpus(max_cpus);
411         }
412 }
413
414 static void (*smp_cross_call)(const struct cpumask *, unsigned int);
415
416 void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
417 {
418         if (!smp_cross_call)
419                 smp_cross_call = fn;
420 }
421
422 void arch_send_call_function_ipi_mask(const struct cpumask *mask)
423 {
424         smp_cross_call(mask, IPI_CALL_FUNC);
425 }
426
427 void arch_send_wakeup_ipi_mask(const struct cpumask *mask)
428 {
429         smp_cross_call(mask, IPI_WAKEUP);
430 }
431
432 void arch_send_call_function_single_ipi(int cpu)
433 {
434         smp_cross_call(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
435 }
436
437 static const char *ipi_types[NR_IPI] = {
438 #define S(x,s)  [x] = s
439         S(IPI_WAKEUP, "CPU wakeup interrupts"),
440         S(IPI_TIMER, "Timer broadcast interrupts"),
441         S(IPI_RESCHEDULE, "Rescheduling interrupts"),
442         S(IPI_CALL_FUNC, "Function call interrupts"),
443         S(IPI_CALL_FUNC_SINGLE, "Single function call interrupts"),
444         S(IPI_CPU_STOP, "CPU stop interrupts"),
445 };
446
447 void show_ipi_list(struct seq_file *p, int prec)
448 {
449         unsigned int cpu, i;
450
451         for (i = 0; i < NR_IPI; i++) {
452                 seq_printf(p, "%*s%u: ", prec - 1, "IPI", i);
453
454                 for_each_online_cpu(cpu)
455                         seq_printf(p, "%10u ",
456                                    __get_irq_stat(cpu, ipi_irqs[i]));
457
458                 seq_printf(p, " %s\n", ipi_types[i]);
459         }
460 }
461
462 u64 smp_irq_stat_cpu(unsigned int cpu)
463 {
464         u64 sum = 0;
465         int i;
466
467         for (i = 0; i < NR_IPI; i++)
468                 sum += __get_irq_stat(cpu, ipi_irqs[i]);
469
470         return sum;
471 }
472
473 #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
474 void tick_broadcast(const struct cpumask *mask)
475 {
476         smp_cross_call(mask, IPI_TIMER);
477 }
478 #endif
479
480 static DEFINE_RAW_SPINLOCK(stop_lock);
481
482 /*
483  * ipi_cpu_stop - handle IPI from smp_send_stop()
484  */
485 static void ipi_cpu_stop(unsigned int cpu)
486 {
487         if (system_state == SYSTEM_BOOTING ||
488             system_state == SYSTEM_RUNNING) {
489                 raw_spin_lock(&stop_lock);
490                 printk(KERN_CRIT "CPU%u: stopping\n", cpu);
491                 dump_stack();
492                 raw_spin_unlock(&stop_lock);
493         }
494
495         set_cpu_online(cpu, false);
496
497         local_fiq_disable();
498         local_irq_disable();
499
500         while (1)
501                 cpu_relax();
502 }
503
504 /*
505  * Main handler for inter-processor interrupts
506  */
507 asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs)
508 {
509         handle_IPI(ipinr, regs);
510 }
511
512 void handle_IPI(int ipinr, struct pt_regs *regs)
513 {
514         unsigned int cpu = smp_processor_id();
515         struct pt_regs *old_regs = set_irq_regs(regs);
516
517         if (ipinr < NR_IPI)
518                 __inc_irq_stat(cpu, ipi_irqs[ipinr]);
519
520         switch (ipinr) {
521         case IPI_WAKEUP:
522                 break;
523
524 #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
525         case IPI_TIMER:
526                 irq_enter();
527                 tick_receive_broadcast();
528                 irq_exit();
529                 break;
530 #endif
531
532         case IPI_RESCHEDULE:
533                 scheduler_ipi();
534                 break;
535
536         case IPI_CALL_FUNC:
537                 irq_enter();
538                 generic_smp_call_function_interrupt();
539                 irq_exit();
540                 break;
541
542         case IPI_CALL_FUNC_SINGLE:
543                 irq_enter();
544                 generic_smp_call_function_single_interrupt();
545                 irq_exit();
546                 break;
547
548         case IPI_CPU_STOP:
549                 irq_enter();
550                 ipi_cpu_stop(cpu);
551                 irq_exit();
552                 break;
553
554         default:
555                 printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
556                        cpu, ipinr);
557                 break;
558         }
559         set_irq_regs(old_regs);
560 }
561
562 void smp_send_reschedule(int cpu)
563 {
564         smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE);
565 }
566
567 #ifdef CONFIG_HOTPLUG_CPU
568 static void smp_kill_cpus(cpumask_t *mask)
569 {
570         unsigned int cpu;
571         for_each_cpu(cpu, mask)
572                 platform_cpu_kill(cpu);
573 }
574 #else
575 static void smp_kill_cpus(cpumask_t *mask) { }
576 #endif
577
578 void smp_send_stop(void)
579 {
580         unsigned long timeout;
581         struct cpumask mask;
582
583         cpumask_copy(&mask, cpu_online_mask);
584         cpumask_clear_cpu(smp_processor_id(), &mask);
585         if (!cpumask_empty(&mask))
586                 smp_cross_call(&mask, IPI_CPU_STOP);
587
588         /* Wait up to one second for other CPUs to stop */
589         timeout = USEC_PER_SEC;
590         while (num_online_cpus() > 1 && timeout--)
591                 udelay(1);
592
593         if (num_online_cpus() > 1)
594                 pr_warning("SMP: failed to stop secondary CPUs\n");
595
596         smp_kill_cpus(&mask);
597 }
598
599 /*
600  * not supported here
601  */
602 int setup_profiling_timer(unsigned int multiplier)
603 {
604         return -EINVAL;
605 }
606
607 #ifdef CONFIG_CPU_FREQ
608
609 static DEFINE_PER_CPU(unsigned long, l_p_j_ref);
610 static DEFINE_PER_CPU(unsigned long, l_p_j_ref_freq);
611 static unsigned long global_l_p_j_ref;
612 static unsigned long global_l_p_j_ref_freq;
613
614 static int cpufreq_callback(struct notifier_block *nb,
615                                         unsigned long val, void *data)
616 {
617         struct cpufreq_freqs *freq = data;
618         int cpu = freq->cpu;
619
620         if (freq->flags & CPUFREQ_CONST_LOOPS)
621                 return NOTIFY_OK;
622
623         if (!per_cpu(l_p_j_ref, cpu)) {
624                 per_cpu(l_p_j_ref, cpu) =
625                         per_cpu(cpu_data, cpu).loops_per_jiffy;
626                 per_cpu(l_p_j_ref_freq, cpu) = freq->old;
627                 if (!global_l_p_j_ref) {
628                         global_l_p_j_ref = loops_per_jiffy;
629                         global_l_p_j_ref_freq = freq->old;
630                 }
631         }
632
633         if ((val == CPUFREQ_PRECHANGE  && freq->old < freq->new) ||
634             (val == CPUFREQ_POSTCHANGE && freq->old > freq->new) ||
635             (val == CPUFREQ_RESUMECHANGE || val == CPUFREQ_SUSPENDCHANGE)) {
636                 loops_per_jiffy = cpufreq_scale(global_l_p_j_ref,
637                                                 global_l_p_j_ref_freq,
638                                                 freq->new);
639                 per_cpu(cpu_data, cpu).loops_per_jiffy =
640                         cpufreq_scale(per_cpu(l_p_j_ref, cpu),
641                                         per_cpu(l_p_j_ref_freq, cpu),
642                                         freq->new);
643         }
644         return NOTIFY_OK;
645 }
646
647 static struct notifier_block cpufreq_notifier = {
648         .notifier_call  = cpufreq_callback,
649 };
650
651 static int __init register_cpufreq_notifier(void)
652 {
653         return cpufreq_register_notifier(&cpufreq_notifier,
654                                                 CPUFREQ_TRANSITION_NOTIFIER);
655 }
656 core_initcall(register_cpufreq_notifier);
657
658 #endif