Merge branch 'work.splice_read' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / arch / powerpc / kernel / machine_kexec_64.c
1 /*
2  * PPC64 code to handle Linux booting another kernel.
3  *
4  * Copyright (C) 2004-2005, IBM Corp.
5  *
6  * Created by: Milton D Miller II
7  *
8  * This source code is licensed under the GNU General Public License,
9  * Version 2.  See the file COPYING for more details.
10  */
11
12
13 #include <linux/kexec.h>
14 #include <linux/smp.h>
15 #include <linux/thread_info.h>
16 #include <linux/init_task.h>
17 #include <linux/errno.h>
18 #include <linux/kernel.h>
19 #include <linux/cpu.h>
20 #include <linux/hardirq.h>
21
22 #include <asm/page.h>
23 #include <asm/current.h>
24 #include <asm/machdep.h>
25 #include <asm/cacheflush.h>
26 #include <asm/paca.h>
27 #include <asm/mmu.h>
28 #include <asm/sections.h>       /* _end */
29 #include <asm/prom.h>
30 #include <asm/smp.h>
31 #include <asm/hw_breakpoint.h>
32 #include <asm/asm-prototypes.h>
33
34 #ifdef CONFIG_PPC_BOOK3E
35 int default_machine_kexec_prepare(struct kimage *image)
36 {
37         int i;
38         /*
39          * Since we use the kernel fault handlers and paging code to
40          * handle the virtual mode, we must make sure no destination
41          * overlaps kernel static data or bss.
42          */
43         for (i = 0; i < image->nr_segments; i++)
44                 if (image->segment[i].mem < __pa(_end))
45                         return -ETXTBSY;
46         return 0;
47 }
48 #else
49 int default_machine_kexec_prepare(struct kimage *image)
50 {
51         int i;
52         unsigned long begin, end;       /* limits of segment */
53         unsigned long low, high;        /* limits of blocked memory range */
54         struct device_node *node;
55         const unsigned long *basep;
56         const unsigned int *sizep;
57
58         if (!mmu_hash_ops.hpte_clear_all)
59                 return -ENOENT;
60
61         /*
62          * Since we use the kernel fault handlers and paging code to
63          * handle the virtual mode, we must make sure no destination
64          * overlaps kernel static data or bss.
65          */
66         for (i = 0; i < image->nr_segments; i++)
67                 if (image->segment[i].mem < __pa(_end))
68                         return -ETXTBSY;
69
70         /*
71          * For non-LPAR, we absolutely can not overwrite the mmu hash
72          * table, since we are still using the bolted entries in it to
73          * do the copy.  Check that here.
74          *
75          * It is safe if the end is below the start of the blocked
76          * region (end <= low), or if the beginning is after the
77          * end of the blocked region (begin >= high).  Use the
78          * boolean identity !(a || b)  === (!a && !b).
79          */
80 #ifdef CONFIG_PPC_STD_MMU_64
81         if (htab_address) {
82                 low = __pa(htab_address);
83                 high = low + htab_size_bytes;
84
85                 for (i = 0; i < image->nr_segments; i++) {
86                         begin = image->segment[i].mem;
87                         end = begin + image->segment[i].memsz;
88
89                         if ((begin < high) && (end > low))
90                                 return -ETXTBSY;
91                 }
92         }
93 #endif /* CONFIG_PPC_STD_MMU_64 */
94
95         /* We also should not overwrite the tce tables */
96         for_each_node_by_type(node, "pci") {
97                 basep = of_get_property(node, "linux,tce-base", NULL);
98                 sizep = of_get_property(node, "linux,tce-size", NULL);
99                 if (basep == NULL || sizep == NULL)
100                         continue;
101
102                 low = *basep;
103                 high = low + (*sizep);
104
105                 for (i = 0; i < image->nr_segments; i++) {
106                         begin = image->segment[i].mem;
107                         end = begin + image->segment[i].memsz;
108
109                         if ((begin < high) && (end > low))
110                                 return -ETXTBSY;
111                 }
112         }
113
114         return 0;
115 }
116 #endif /* !CONFIG_PPC_BOOK3E */
117
118 static void copy_segments(unsigned long ind)
119 {
120         unsigned long entry;
121         unsigned long *ptr;
122         void *dest;
123         void *addr;
124
125         /*
126          * We rely on kexec_load to create a lists that properly
127          * initializes these pointers before they are used.
128          * We will still crash if the list is wrong, but at least
129          * the compiler will be quiet.
130          */
131         ptr = NULL;
132         dest = NULL;
133
134         for (entry = ind; !(entry & IND_DONE); entry = *ptr++) {
135                 addr = __va(entry & PAGE_MASK);
136
137                 switch (entry & IND_FLAGS) {
138                 case IND_DESTINATION:
139                         dest = addr;
140                         break;
141                 case IND_INDIRECTION:
142                         ptr = addr;
143                         break;
144                 case IND_SOURCE:
145                         copy_page(dest, addr);
146                         dest += PAGE_SIZE;
147                 }
148         }
149 }
150
151 void kexec_copy_flush(struct kimage *image)
152 {
153         long i, nr_segments = image->nr_segments;
154         struct  kexec_segment ranges[KEXEC_SEGMENT_MAX];
155
156         /* save the ranges on the stack to efficiently flush the icache */
157         memcpy(ranges, image->segment, sizeof(ranges));
158
159         /*
160          * After this call we may not use anything allocated in dynamic
161          * memory, including *image.
162          *
163          * Only globals and the stack are allowed.
164          */
165         copy_segments(image->head);
166
167         /*
168          * we need to clear the icache for all dest pages sometime,
169          * including ones that were in place on the original copy
170          */
171         for (i = 0; i < nr_segments; i++)
172                 flush_icache_range((unsigned long)__va(ranges[i].mem),
173                         (unsigned long)__va(ranges[i].mem + ranges[i].memsz));
174 }
175
176 #ifdef CONFIG_SMP
177
178 static int kexec_all_irq_disabled = 0;
179
180 static void kexec_smp_down(void *arg)
181 {
182         local_irq_disable();
183         hard_irq_disable();
184
185         mb(); /* make sure our irqs are disabled before we say they are */
186         get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF;
187         while(kexec_all_irq_disabled == 0)
188                 cpu_relax();
189         mb(); /* make sure all irqs are disabled before this */
190         hw_breakpoint_disable();
191         /*
192          * Now every CPU has IRQs off, we can clear out any pending
193          * IPIs and be sure that no more will come in after this.
194          */
195         if (ppc_md.kexec_cpu_down)
196                 ppc_md.kexec_cpu_down(0, 1);
197
198         kexec_smp_wait();
199         /* NOTREACHED */
200 }
201
202 static void kexec_prepare_cpus_wait(int wait_state)
203 {
204         int my_cpu, i, notified=-1;
205
206         hw_breakpoint_disable();
207         my_cpu = get_cpu();
208         /* Make sure each CPU has at least made it to the state we need.
209          *
210          * FIXME: There is a (slim) chance of a problem if not all of the CPUs
211          * are correctly onlined.  If somehow we start a CPU on boot with RTAS
212          * start-cpu, but somehow that CPU doesn't write callin_cpu_map[] in
213          * time, the boot CPU will timeout.  If it does eventually execute
214          * stuff, the secondary will start up (paca[].cpu_start was written) and
215          * get into a peculiar state.  If the platform supports
216          * smp_ops->take_timebase(), the secondary CPU will probably be spinning
217          * in there.  If not (i.e. pseries), the secondary will continue on and
218          * try to online itself/idle/etc. If it survives that, we need to find
219          * these possible-but-not-online-but-should-be CPUs and chaperone them
220          * into kexec_smp_wait().
221          */
222         for_each_online_cpu(i) {
223                 if (i == my_cpu)
224                         continue;
225
226                 while (paca[i].kexec_state < wait_state) {
227                         barrier();
228                         if (i != notified) {
229                                 printk(KERN_INFO "kexec: waiting for cpu %d "
230                                        "(physical %d) to enter %i state\n",
231                                        i, paca[i].hw_cpu_id, wait_state);
232                                 notified = i;
233                         }
234                 }
235         }
236         mb();
237 }
238
239 /*
240  * We need to make sure each present CPU is online.  The next kernel will scan
241  * the device tree and assume primary threads are online and query secondary
242  * threads via RTAS to online them if required.  If we don't online primary
243  * threads, they will be stuck.  However, we also online secondary threads as we
244  * may be using 'cede offline'.  In this case RTAS doesn't see the secondary
245  * threads as offline -- and again, these CPUs will be stuck.
246  *
247  * So, we online all CPUs that should be running, including secondary threads.
248  */
249 static void wake_offline_cpus(void)
250 {
251         int cpu = 0;
252
253         for_each_present_cpu(cpu) {
254                 if (!cpu_online(cpu)) {
255                         printk(KERN_INFO "kexec: Waking offline cpu %d.\n",
256                                cpu);
257                         WARN_ON(cpu_up(cpu));
258                 }
259         }
260 }
261
262 static void kexec_prepare_cpus(void)
263 {
264         wake_offline_cpus();
265         smp_call_function(kexec_smp_down, NULL, /* wait */0);
266         local_irq_disable();
267         hard_irq_disable();
268
269         mb(); /* make sure IRQs are disabled before we say they are */
270         get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF;
271
272         kexec_prepare_cpus_wait(KEXEC_STATE_IRQS_OFF);
273         /* we are sure every CPU has IRQs off at this point */
274         kexec_all_irq_disabled = 1;
275
276         /* after we tell the others to go down */
277         if (ppc_md.kexec_cpu_down)
278                 ppc_md.kexec_cpu_down(0, 0);
279
280         /*
281          * Before removing MMU mappings make sure all CPUs have entered real
282          * mode:
283          */
284         kexec_prepare_cpus_wait(KEXEC_STATE_REAL_MODE);
285
286         put_cpu();
287 }
288
289 #else /* ! SMP */
290
291 static void kexec_prepare_cpus(void)
292 {
293         /*
294          * move the secondarys to us so that we can copy
295          * the new kernel 0-0x100 safely
296          *
297          * do this if kexec in setup.c ?
298          *
299          * We need to release the cpus if we are ever going from an
300          * UP to an SMP kernel.
301          */
302         smp_release_cpus();
303         if (ppc_md.kexec_cpu_down)
304                 ppc_md.kexec_cpu_down(0, 0);
305         local_irq_disable();
306         hard_irq_disable();
307 }
308
309 #endif /* SMP */
310
311 /*
312  * kexec thread structure and stack.
313  *
314  * We need to make sure that this is 16384-byte aligned due to the
315  * way process stacks are handled.  It also must be statically allocated
316  * or allocated as part of the kimage, because everything else may be
317  * overwritten when we copy the kexec image.  We piggyback on the
318  * "init_task" linker section here to statically allocate a stack.
319  *
320  * We could use a smaller stack if we don't care about anything using
321  * current, but that audit has not been performed.
322  */
323 static union thread_union kexec_stack __init_task_data =
324         { };
325
326 /*
327  * For similar reasons to the stack above, the kexecing CPU needs to be on a
328  * static PACA; we switch to kexec_paca.
329  */
330 struct paca_struct kexec_paca;
331
332 /* Our assembly helper, in misc_64.S */
333 extern void kexec_sequence(void *newstack, unsigned long start,
334                            void *image, void *control,
335                            void (*clear_all)(void)) __noreturn;
336
337 /* too late to fail here */
338 void default_machine_kexec(struct kimage *image)
339 {
340         /* prepare control code if any */
341
342         /*
343         * If the kexec boot is the normal one, need to shutdown other cpus
344         * into our wait loop and quiesce interrupts.
345         * Otherwise, in the case of crashed mode (crashing_cpu >= 0),
346         * stopping other CPUs and collecting their pt_regs is done before
347         * using debugger IPI.
348         */
349
350         if (!kdump_in_progress())
351                 kexec_prepare_cpus();
352
353         pr_debug("kexec: Starting switchover sequence.\n");
354
355         /* switch to a staticly allocated stack.  Based on irq stack code.
356          * We setup preempt_count to avoid using VMX in memcpy.
357          * XXX: the task struct will likely be invalid once we do the copy!
358          */
359         kexec_stack.thread_info.task = current_thread_info()->task;
360         kexec_stack.thread_info.flags = 0;
361         kexec_stack.thread_info.preempt_count = HARDIRQ_OFFSET;
362         kexec_stack.thread_info.cpu = current_thread_info()->cpu;
363
364         /* We need a static PACA, too; copy this CPU's PACA over and switch to
365          * it.  Also poison per_cpu_offset to catch anyone using non-static
366          * data.
367          */
368         memcpy(&kexec_paca, get_paca(), sizeof(struct paca_struct));
369         kexec_paca.data_offset = 0xedeaddeadeeeeeeeUL;
370         paca = (struct paca_struct *)RELOC_HIDE(&kexec_paca, 0) -
371                 kexec_paca.paca_index;
372         setup_paca(&kexec_paca);
373
374         /* XXX: If anyone does 'dynamic lppacas' this will also need to be
375          * switched to a static version!
376          */
377
378         /* Some things are best done in assembly.  Finding globals with
379          * a toc is easier in C, so pass in what we can.
380          */
381         kexec_sequence(&kexec_stack, image->start, image,
382                         page_address(image->control_code_page),
383 #ifdef CONFIG_PPC_STD_MMU
384                         mmu_hash_ops.hpte_clear_all
385 #else
386                         NULL
387 #endif
388         );
389         /* NOTREACHED */
390 }
391
392 #ifdef CONFIG_PPC_STD_MMU_64
393 /* Values we need to export to the second kernel via the device tree. */
394 static unsigned long htab_base;
395 static unsigned long htab_size;
396
397 static struct property htab_base_prop = {
398         .name = "linux,htab-base",
399         .length = sizeof(unsigned long),
400         .value = &htab_base,
401 };
402
403 static struct property htab_size_prop = {
404         .name = "linux,htab-size",
405         .length = sizeof(unsigned long),
406         .value = &htab_size,
407 };
408
409 static int __init export_htab_values(void)
410 {
411         struct device_node *node;
412
413         /* On machines with no htab htab_address is NULL */
414         if (!htab_address)
415                 return -ENODEV;
416
417         node = of_find_node_by_path("/chosen");
418         if (!node)
419                 return -ENODEV;
420
421         /* remove any stale propertys so ours can be found */
422         of_remove_property(node, of_find_property(node, htab_base_prop.name, NULL));
423         of_remove_property(node, of_find_property(node, htab_size_prop.name, NULL));
424
425         htab_base = cpu_to_be64(__pa(htab_address));
426         of_add_property(node, &htab_base_prop);
427         htab_size = cpu_to_be64(htab_size_bytes);
428         of_add_property(node, &htab_size_prop);
429
430         of_node_put(node);
431         return 0;
432 }
433 late_initcall(export_htab_values);
434 #endif /* CONFIG_PPC_STD_MMU_64 */