[PATCH] sched: disable preempt in idle tasks
[linux-2.6.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/config.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/cpu.h>
21 #include <linux/smp.h>
22 #include <linux/seq_file.h>
23
24 #include <asm/atomic.h>
25 #include <asm/cacheflush.h>
26 #include <asm/cpu.h>
27 #include <asm/mmu_context.h>
28 #include <asm/pgtable.h>
29 #include <asm/pgalloc.h>
30 #include <asm/processor.h>
31 #include <asm/tlbflush.h>
32 #include <asm/ptrace.h>
33
34 /*
35  * bitmask of present and online CPUs.
36  * The present bitmask indicates that the CPU is physically present.
37  * The online bitmask indicates that the CPU is up and running.
38  */
39 cpumask_t cpu_possible_map;
40 cpumask_t cpu_online_map;
41
42 /*
43  * as from 2.5, kernels no longer have an init_tasks structure
44  * so we need some other way of telling a new secondary core
45  * where to place its SVC stack
46  */
47 struct secondary_data secondary_data;
48
49 /*
50  * structures for inter-processor calls
51  * - A collection of single bit ipi messages.
52  */
53 struct ipi_data {
54         spinlock_t lock;
55         unsigned long ipi_count;
56         unsigned long bits;
57 };
58
59 static DEFINE_PER_CPU(struct ipi_data, ipi_data) = {
60         .lock   = SPIN_LOCK_UNLOCKED,
61 };
62
63 enum ipi_msg_type {
64         IPI_TIMER,
65         IPI_RESCHEDULE,
66         IPI_CALL_FUNC,
67         IPI_CPU_STOP,
68 };
69
70 struct smp_call_struct {
71         void (*func)(void *info);
72         void *info;
73         int wait;
74         cpumask_t pending;
75         cpumask_t unfinished;
76 };
77
78 static struct smp_call_struct * volatile smp_call_function_data;
79 static DEFINE_SPINLOCK(smp_call_function_lock);
80
81 int __cpuinit __cpu_up(unsigned int cpu)
82 {
83         struct cpuinfo_arm *ci = &per_cpu(cpu_data, cpu);
84         struct task_struct *idle = ci->idle;
85         pgd_t *pgd;
86         pmd_t *pmd;
87         int ret;
88
89         /*
90          * Spawn a new process manually, if not already done.
91          * Grab a pointer to its task struct so we can mess with it
92          */
93         if (!idle) {
94                 idle = fork_idle(cpu);
95                 if (IS_ERR(idle)) {
96                         printk(KERN_ERR "CPU%u: fork() failed\n", cpu);
97                         return PTR_ERR(idle);
98                 }
99                 ci->idle = idle;
100         }
101
102         /*
103          * Allocate initial page tables to allow the new CPU to
104          * enable the MMU safely.  This essentially means a set
105          * of our "standard" page tables, with the addition of
106          * a 1:1 mapping for the physical address of the kernel.
107          */
108         pgd = pgd_alloc(&init_mm);
109         pmd = pmd_offset(pgd, PHYS_OFFSET);
110         *pmd = __pmd((PHYS_OFFSET & PGDIR_MASK) |
111                      PMD_TYPE_SECT | PMD_SECT_AP_WRITE);
112
113         /*
114          * We need to tell the secondary core where to find
115          * its stack and the page tables.
116          */
117         secondary_data.stack = (void *)idle->thread_info + THREAD_START_SP;
118         secondary_data.pgdir = virt_to_phys(pgd);
119         wmb();
120
121         /*
122          * Now bring the CPU into our world.
123          */
124         ret = boot_secondary(cpu, idle);
125         if (ret == 0) {
126                 unsigned long timeout;
127
128                 /*
129                  * CPU was successfully started, wait for it
130                  * to come online or time out.
131                  */
132                 timeout = jiffies + HZ;
133                 while (time_before(jiffies, timeout)) {
134                         if (cpu_online(cpu))
135                                 break;
136
137                         udelay(10);
138                         barrier();
139                 }
140
141                 if (!cpu_online(cpu))
142                         ret = -EIO;
143         }
144
145         secondary_data.stack = NULL;
146         secondary_data.pgdir = 0;
147
148         *pmd_offset(pgd, PHYS_OFFSET) = __pmd(0);
149         pgd_free(pgd);
150
151         if (ret) {
152                 printk(KERN_CRIT "CPU%u: processor failed to boot\n", cpu);
153
154                 /*
155                  * FIXME: We need to clean up the new idle thread. --rmk
156                  */
157         }
158
159         return ret;
160 }
161
162 #ifdef CONFIG_HOTPLUG_CPU
163 /*
164  * __cpu_disable runs on the processor to be shutdown.
165  */
166 int __cpuexit __cpu_disable(void)
167 {
168         unsigned int cpu = smp_processor_id();
169         struct task_struct *p;
170         int ret;
171
172         ret = mach_cpu_disable(cpu);
173         if (ret)
174                 return ret;
175
176         /*
177          * Take this CPU offline.  Once we clear this, we can't return,
178          * and we must not schedule until we're ready to give up the cpu.
179          */
180         cpu_clear(cpu, cpu_online_map);
181
182         /*
183          * OK - migrate IRQs away from this CPU
184          */
185         migrate_irqs();
186
187         /*
188          * Stop the local timer for this CPU.
189          */
190         local_timer_stop(cpu);
191
192         /*
193          * Flush user cache and TLB mappings, and then remove this CPU
194          * from the vm mask set of all processes.
195          */
196         flush_cache_all();
197         local_flush_tlb_all();
198
199         read_lock(&tasklist_lock);
200         for_each_process(p) {
201                 if (p->mm)
202                         cpu_clear(cpu, p->mm->cpu_vm_mask);
203         }
204         read_unlock(&tasklist_lock);
205
206         return 0;
207 }
208
209 /*
210  * called on the thread which is asking for a CPU to be shutdown -
211  * waits until shutdown has completed, or it is timed out.
212  */
213 void __cpuexit __cpu_die(unsigned int cpu)
214 {
215         if (!platform_cpu_kill(cpu))
216                 printk("CPU%u: unable to kill\n", cpu);
217 }
218
219 /*
220  * Called from the idle thread for the CPU which has been shutdown.
221  *
222  * Note that we disable IRQs here, but do not re-enable them
223  * before returning to the caller. This is also the behaviour
224  * of the other hotplug-cpu capable cores, so presumably coming
225  * out of idle fixes this.
226  */
227 void __cpuexit cpu_die(void)
228 {
229         unsigned int cpu = smp_processor_id();
230
231         local_irq_disable();
232         idle_task_exit();
233
234         /*
235          * actual CPU shutdown procedure is at least platform (if not
236          * CPU) specific
237          */
238         platform_cpu_die(cpu);
239
240         /*
241          * Do not return to the idle loop - jump back to the secondary
242          * cpu initialisation.  There's some initialisation which needs
243          * to be repeated to undo the effects of taking the CPU offline.
244          */
245         __asm__("mov    sp, %0\n"
246         "       b       secondary_start_kernel"
247                 :
248                 : "r" ((void *)current->thread_info + THREAD_SIZE - 8));
249 }
250 #endif /* CONFIG_HOTPLUG_CPU */
251
252 /*
253  * This is the secondary CPU boot entry.  We're using this CPUs
254  * idle thread stack, but a set of temporary page tables.
255  */
256 asmlinkage void __cpuinit secondary_start_kernel(void)
257 {
258         struct mm_struct *mm = &init_mm;
259         unsigned int cpu;
260
261         cpu = smp_processor_id();
262
263         printk("CPU%u: Booted secondary processor\n", cpu);
264
265         /*
266          * All kernel threads share the same mm context; grab a
267          * reference and switch to it.
268          */
269         atomic_inc(&mm->mm_users);
270         atomic_inc(&mm->mm_count);
271         current->active_mm = mm;
272         cpu_set(cpu, mm->cpu_vm_mask);
273         cpu_switch_mm(mm->pgd, mm);
274         enter_lazy_tlb(mm, current);
275         local_flush_tlb_all();
276
277         cpu_init();
278         preempt_disable();
279
280         /*
281          * Give the platform a chance to do its own initialisation.
282          */
283         platform_secondary_init(cpu);
284
285         /*
286          * Enable local interrupts.
287          */
288         local_irq_enable();
289         local_fiq_enable();
290
291         calibrate_delay();
292
293         smp_store_cpu_info(cpu);
294
295         /*
296          * OK, now it's safe to let the boot CPU continue
297          */
298         cpu_set(cpu, cpu_online_map);
299
300         /*
301          * Setup local timer for this CPU.
302          */
303         local_timer_setup(cpu);
304
305         /*
306          * OK, it's off to the idle thread for us
307          */
308         cpu_idle();
309 }
310
311 /*
312  * Called by both boot and secondaries to move global data into
313  * per-processor storage.
314  */
315 void __cpuinit smp_store_cpu_info(unsigned int cpuid)
316 {
317         struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid);
318
319         cpu_info->loops_per_jiffy = loops_per_jiffy;
320 }
321
322 void __init smp_cpus_done(unsigned int max_cpus)
323 {
324         int cpu;
325         unsigned long bogosum = 0;
326
327         for_each_online_cpu(cpu)
328                 bogosum += per_cpu(cpu_data, cpu).loops_per_jiffy;
329
330         printk(KERN_INFO "SMP: Total of %d processors activated "
331                "(%lu.%02lu BogoMIPS).\n",
332                num_online_cpus(),
333                bogosum / (500000/HZ),
334                (bogosum / (5000/HZ)) % 100);
335 }
336
337 void __init smp_prepare_boot_cpu(void)
338 {
339         unsigned int cpu = smp_processor_id();
340
341         per_cpu(cpu_data, cpu).idle = current;
342
343         cpu_set(cpu, cpu_possible_map);
344         cpu_set(cpu, cpu_present_map);
345         cpu_set(cpu, cpu_online_map);
346 }
347
348 static void send_ipi_message(cpumask_t callmap, enum ipi_msg_type msg)
349 {
350         unsigned long flags;
351         unsigned int cpu;
352
353         local_irq_save(flags);
354
355         for_each_cpu_mask(cpu, callmap) {
356                 struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
357
358                 spin_lock(&ipi->lock);
359                 ipi->bits |= 1 << msg;
360                 spin_unlock(&ipi->lock);
361         }
362
363         /*
364          * Call the platform specific cross-CPU call function.
365          */
366         smp_cross_call(callmap);
367
368         local_irq_restore(flags);
369 }
370
371 /*
372  * You must not call this function with disabled interrupts, from a
373  * hardware interrupt handler, nor from a bottom half handler.
374  */
375 static int smp_call_function_on_cpu(void (*func)(void *info), void *info,
376                                     int retry, int wait, cpumask_t callmap)
377 {
378         struct smp_call_struct data;
379         unsigned long timeout;
380         int ret = 0;
381
382         data.func = func;
383         data.info = info;
384         data.wait = wait;
385
386         cpu_clear(smp_processor_id(), callmap);
387         if (cpus_empty(callmap))
388                 goto out;
389
390         data.pending = callmap;
391         if (wait)
392                 data.unfinished = callmap;
393
394         /*
395          * try to get the mutex on smp_call_function_data
396          */
397         spin_lock(&smp_call_function_lock);
398         smp_call_function_data = &data;
399
400         send_ipi_message(callmap, IPI_CALL_FUNC);
401
402         timeout = jiffies + HZ;
403         while (!cpus_empty(data.pending) && time_before(jiffies, timeout))
404                 barrier();
405
406         /*
407          * did we time out?
408          */
409         if (!cpus_empty(data.pending)) {
410                 /*
411                  * this may be causing our panic - report it
412                  */
413                 printk(KERN_CRIT
414                        "CPU%u: smp_call_function timeout for %p(%p)\n"
415                        "      callmap %lx pending %lx, %swait\n",
416                        smp_processor_id(), func, info, *cpus_addr(callmap),
417                        *cpus_addr(data.pending), wait ? "" : "no ");
418
419                 /*
420                  * TRACE
421                  */
422                 timeout = jiffies + (5 * HZ);
423                 while (!cpus_empty(data.pending) && time_before(jiffies, timeout))
424                         barrier();
425
426                 if (cpus_empty(data.pending))
427                         printk(KERN_CRIT "     RESOLVED\n");
428                 else
429                         printk(KERN_CRIT "     STILL STUCK\n");
430         }
431
432         /*
433          * whatever happened, we're done with the data, so release it
434          */
435         smp_call_function_data = NULL;
436         spin_unlock(&smp_call_function_lock);
437
438         if (!cpus_empty(data.pending)) {
439                 ret = -ETIMEDOUT;
440                 goto out;
441         }
442
443         if (wait)
444                 while (!cpus_empty(data.unfinished))
445                         barrier();
446  out:
447
448         return 0;
449 }
450
451 int smp_call_function(void (*func)(void *info), void *info, int retry,
452                       int wait)
453 {
454         return smp_call_function_on_cpu(func, info, retry, wait,
455                                         cpu_online_map);
456 }
457
458 void show_ipi_list(struct seq_file *p)
459 {
460         unsigned int cpu;
461
462         seq_puts(p, "IPI:");
463
464         for_each_present_cpu(cpu)
465                 seq_printf(p, " %10lu", per_cpu(ipi_data, cpu).ipi_count);
466
467         seq_putc(p, '\n');
468 }
469
470 void show_local_irqs(struct seq_file *p)
471 {
472         unsigned int cpu;
473
474         seq_printf(p, "LOC: ");
475
476         for_each_present_cpu(cpu)
477                 seq_printf(p, "%10u ", irq_stat[cpu].local_timer_irqs);
478
479         seq_putc(p, '\n');
480 }
481
482 static void ipi_timer(struct pt_regs *regs)
483 {
484         int user = user_mode(regs);
485
486         irq_enter();
487         profile_tick(CPU_PROFILING, regs);
488         update_process_times(user);
489         irq_exit();
490 }
491
492 #ifdef CONFIG_LOCAL_TIMERS
493 asmlinkage void do_local_timer(struct pt_regs *regs)
494 {
495         int cpu = smp_processor_id();
496
497         if (local_timer_ack()) {
498                 irq_stat[cpu].local_timer_irqs++;
499                 ipi_timer(regs);
500         }
501 }
502 #endif
503
504 /*
505  * ipi_call_function - handle IPI from smp_call_function()
506  *
507  * Note that we copy data out of the cross-call structure and then
508  * let the caller know that we're here and have done with their data
509  */
510 static void ipi_call_function(unsigned int cpu)
511 {
512         struct smp_call_struct *data = smp_call_function_data;
513         void (*func)(void *info) = data->func;
514         void *info = data->info;
515         int wait = data->wait;
516
517         cpu_clear(cpu, data->pending);
518
519         func(info);
520
521         if (wait)
522                 cpu_clear(cpu, data->unfinished);
523 }
524
525 static DEFINE_SPINLOCK(stop_lock);
526
527 /*
528  * ipi_cpu_stop - handle IPI from smp_send_stop()
529  */
530 static void ipi_cpu_stop(unsigned int cpu)
531 {
532         spin_lock(&stop_lock);
533         printk(KERN_CRIT "CPU%u: stopping\n", cpu);
534         dump_stack();
535         spin_unlock(&stop_lock);
536
537         cpu_clear(cpu, cpu_online_map);
538
539         local_fiq_disable();
540         local_irq_disable();
541
542         while (1)
543                 cpu_relax();
544 }
545
546 /*
547  * Main handler for inter-processor interrupts
548  *
549  * For ARM, the ipimask now only identifies a single
550  * category of IPI (Bit 1 IPIs have been replaced by a
551  * different mechanism):
552  *
553  *  Bit 0 - Inter-processor function call
554  */
555 asmlinkage void do_IPI(struct pt_regs *regs)
556 {
557         unsigned int cpu = smp_processor_id();
558         struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
559
560         ipi->ipi_count++;
561
562         for (;;) {
563                 unsigned long msgs;
564
565                 spin_lock(&ipi->lock);
566                 msgs = ipi->bits;
567                 ipi->bits = 0;
568                 spin_unlock(&ipi->lock);
569
570                 if (!msgs)
571                         break;
572
573                 do {
574                         unsigned nextmsg;
575
576                         nextmsg = msgs & -msgs;
577                         msgs &= ~nextmsg;
578                         nextmsg = ffz(~nextmsg);
579
580                         switch (nextmsg) {
581                         case IPI_TIMER:
582                                 ipi_timer(regs);
583                                 break;
584
585                         case IPI_RESCHEDULE:
586                                 /*
587                                  * nothing more to do - eveything is
588                                  * done on the interrupt return path
589                                  */
590                                 break;
591
592                         case IPI_CALL_FUNC:
593                                 ipi_call_function(cpu);
594                                 break;
595
596                         case IPI_CPU_STOP:
597                                 ipi_cpu_stop(cpu);
598                                 break;
599
600                         default:
601                                 printk(KERN_CRIT "CPU%u: Unknown IPI message 0x%x\n",
602                                        cpu, nextmsg);
603                                 break;
604                         }
605                 } while (msgs);
606         }
607 }
608
609 void smp_send_reschedule(int cpu)
610 {
611         send_ipi_message(cpumask_of_cpu(cpu), IPI_RESCHEDULE);
612 }
613
614 void smp_send_timer(void)
615 {
616         cpumask_t mask = cpu_online_map;
617         cpu_clear(smp_processor_id(), mask);
618         send_ipi_message(mask, IPI_TIMER);
619 }
620
621 void smp_send_stop(void)
622 {
623         cpumask_t mask = cpu_online_map;
624         cpu_clear(smp_processor_id(), mask);
625         send_ipi_message(mask, IPI_CPU_STOP);
626 }
627
628 /*
629  * not supported here
630  */
631 int __init setup_profiling_timer(unsigned int multiplier)
632 {
633         return -EINVAL;
634 }
635
636 static int
637 on_each_cpu_mask(void (*func)(void *), void *info, int retry, int wait,
638                  cpumask_t mask)
639 {
640         int ret = 0;
641
642         preempt_disable();
643
644         ret = smp_call_function_on_cpu(func, info, retry, wait, mask);
645         if (cpu_isset(smp_processor_id(), mask))
646                 func(info);
647
648         preempt_enable();
649
650         return ret;
651 }
652
653 /**********************************************************************/
654
655 /*
656  * TLB operations
657  */
658 struct tlb_args {
659         struct vm_area_struct *ta_vma;
660         unsigned long ta_start;
661         unsigned long ta_end;
662 };
663
664 static inline void ipi_flush_tlb_all(void *ignored)
665 {
666         local_flush_tlb_all();
667 }
668
669 static inline void ipi_flush_tlb_mm(void *arg)
670 {
671         struct mm_struct *mm = (struct mm_struct *)arg;
672
673         local_flush_tlb_mm(mm);
674 }
675
676 static inline void ipi_flush_tlb_page(void *arg)
677 {
678         struct tlb_args *ta = (struct tlb_args *)arg;
679
680         local_flush_tlb_page(ta->ta_vma, ta->ta_start);
681 }
682
683 static inline void ipi_flush_tlb_kernel_page(void *arg)
684 {
685         struct tlb_args *ta = (struct tlb_args *)arg;
686
687         local_flush_tlb_kernel_page(ta->ta_start);
688 }
689
690 static inline void ipi_flush_tlb_range(void *arg)
691 {
692         struct tlb_args *ta = (struct tlb_args *)arg;
693
694         local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
695 }
696
697 static inline void ipi_flush_tlb_kernel_range(void *arg)
698 {
699         struct tlb_args *ta = (struct tlb_args *)arg;
700
701         local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end);
702 }
703
704 void flush_tlb_all(void)
705 {
706         on_each_cpu(ipi_flush_tlb_all, NULL, 1, 1);
707 }
708
709 void flush_tlb_mm(struct mm_struct *mm)
710 {
711         cpumask_t mask = mm->cpu_vm_mask;
712
713         on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, 1, mask);
714 }
715
716 void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
717 {
718         cpumask_t mask = vma->vm_mm->cpu_vm_mask;
719         struct tlb_args ta;
720
721         ta.ta_vma = vma;
722         ta.ta_start = uaddr;
723
724         on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, 1, mask);
725 }
726
727 void flush_tlb_kernel_page(unsigned long kaddr)
728 {
729         struct tlb_args ta;
730
731         ta.ta_start = kaddr;
732
733         on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1, 1);
734 }
735
736 void flush_tlb_range(struct vm_area_struct *vma,
737                      unsigned long start, unsigned long end)
738 {
739         cpumask_t mask = vma->vm_mm->cpu_vm_mask;
740         struct tlb_args ta;
741
742         ta.ta_vma = vma;
743         ta.ta_start = start;
744         ta.ta_end = end;
745
746         on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, 1, mask);
747 }
748
749 void flush_tlb_kernel_range(unsigned long start, unsigned long end)
750 {
751         struct tlb_args ta;
752
753         ta.ta_start = start;
754         ta.ta_end = end;
755
756         on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1, 1);
757 }