powerpc: More stack randomisation for 64bit binaries
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / powerpc / kernel / process.c
CommitLineData
14cf11af 1/*
14cf11af
PM
2 * Derived from "arch/i386/kernel/process.c"
3 * Copyright (C) 1995 Linus Torvalds
4 *
5 * Updated and modified by Cort Dougan (cort@cs.nmt.edu) and
6 * Paul Mackerras (paulus@cs.anu.edu.au)
7 *
8 * PowerPC version
9 * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version
14 * 2 of the License, or (at your option) any later version.
15 */
16
14cf11af
PM
17#include <linux/errno.h>
18#include <linux/sched.h>
19#include <linux/kernel.h>
20#include <linux/mm.h>
21#include <linux/smp.h>
14cf11af
PM
22#include <linux/stddef.h>
23#include <linux/unistd.h>
24#include <linux/ptrace.h>
25#include <linux/slab.h>
26#include <linux/user.h>
27#include <linux/elf.h>
28#include <linux/init.h>
29#include <linux/prctl.h>
30#include <linux/init_task.h>
31#include <linux/module.h>
32#include <linux/kallsyms.h>
33#include <linux/mqueue.h>
34#include <linux/hardirq.h>
06d67d54 35#include <linux/utsname.h>
6794c782 36#include <linux/ftrace.h>
79741dd3 37#include <linux/kernel_stat.h>
14cf11af
PM
38
39#include <asm/pgtable.h>
40#include <asm/uaccess.h>
41#include <asm/system.h>
42#include <asm/io.h>
43#include <asm/processor.h>
44#include <asm/mmu.h>
45#include <asm/prom.h>
76032de8 46#include <asm/machdep.h>
c6622f63 47#include <asm/time.h>
a7f31841 48#include <asm/syscalls.h>
06d67d54
PM
49#ifdef CONFIG_PPC64
50#include <asm/firmware.h>
06d67d54 51#endif
d6a61bfc
LM
52#include <linux/kprobes.h>
53#include <linux/kdebug.h>
14cf11af
PM
54
55extern unsigned long _get_SP(void);
56
57#ifndef CONFIG_SMP
58struct task_struct *last_task_used_math = NULL;
59struct task_struct *last_task_used_altivec = NULL;
ce48b210 60struct task_struct *last_task_used_vsx = NULL;
14cf11af
PM
61struct task_struct *last_task_used_spe = NULL;
62#endif
63
14cf11af
PM
64/*
65 * Make sure the floating-point register state in the
66 * the thread_struct is up to date for task tsk.
67 */
68void flush_fp_to_thread(struct task_struct *tsk)
69{
70 if (tsk->thread.regs) {
71 /*
72 * We need to disable preemption here because if we didn't,
73 * another process could get scheduled after the regs->msr
74 * test but before we have finished saving the FP registers
75 * to the thread_struct. That process could take over the
76 * FPU, and then when we get scheduled again we would store
77 * bogus values for the remaining FP registers.
78 */
79 preempt_disable();
80 if (tsk->thread.regs->msr & MSR_FP) {
81#ifdef CONFIG_SMP
82 /*
83 * This should only ever be called for current or
84 * for a stopped child process. Since we save away
85 * the FP register state on context switch on SMP,
86 * there is something wrong if a stopped child appears
87 * to still have its FP state in the CPU registers.
88 */
89 BUG_ON(tsk != current);
90#endif
0ee6c15e 91 giveup_fpu(tsk);
14cf11af
PM
92 }
93 preempt_enable();
94 }
95}
96
97void enable_kernel_fp(void)
98{
99 WARN_ON(preemptible());
100
101#ifdef CONFIG_SMP
102 if (current->thread.regs && (current->thread.regs->msr & MSR_FP))
103 giveup_fpu(current);
104 else
105 giveup_fpu(NULL); /* just enables FP for kernel */
106#else
107 giveup_fpu(last_task_used_math);
108#endif /* CONFIG_SMP */
109}
110EXPORT_SYMBOL(enable_kernel_fp);
111
14cf11af
PM
112#ifdef CONFIG_ALTIVEC
113void enable_kernel_altivec(void)
114{
115 WARN_ON(preemptible());
116
117#ifdef CONFIG_SMP
118 if (current->thread.regs && (current->thread.regs->msr & MSR_VEC))
119 giveup_altivec(current);
120 else
121 giveup_altivec(NULL); /* just enable AltiVec for kernel - force */
122#else
123 giveup_altivec(last_task_used_altivec);
124#endif /* CONFIG_SMP */
125}
126EXPORT_SYMBOL(enable_kernel_altivec);
127
128/*
129 * Make sure the VMX/Altivec register state in the
130 * the thread_struct is up to date for task tsk.
131 */
132void flush_altivec_to_thread(struct task_struct *tsk)
133{
134 if (tsk->thread.regs) {
135 preempt_disable();
136 if (tsk->thread.regs->msr & MSR_VEC) {
137#ifdef CONFIG_SMP
138 BUG_ON(tsk != current);
139#endif
0ee6c15e 140 giveup_altivec(tsk);
14cf11af
PM
141 }
142 preempt_enable();
143 }
144}
14cf11af
PM
145#endif /* CONFIG_ALTIVEC */
146
ce48b210
MN
147#ifdef CONFIG_VSX
148#if 0
149/* not currently used, but some crazy RAID module might want to later */
150void enable_kernel_vsx(void)
151{
152 WARN_ON(preemptible());
153
154#ifdef CONFIG_SMP
155 if (current->thread.regs && (current->thread.regs->msr & MSR_VSX))
156 giveup_vsx(current);
157 else
158 giveup_vsx(NULL); /* just enable vsx for kernel - force */
159#else
160 giveup_vsx(last_task_used_vsx);
161#endif /* CONFIG_SMP */
162}
163EXPORT_SYMBOL(enable_kernel_vsx);
164#endif
165
7c292170
MN
166void giveup_vsx(struct task_struct *tsk)
167{
168 giveup_fpu(tsk);
169 giveup_altivec(tsk);
170 __giveup_vsx(tsk);
171}
172
ce48b210
MN
173void flush_vsx_to_thread(struct task_struct *tsk)
174{
175 if (tsk->thread.regs) {
176 preempt_disable();
177 if (tsk->thread.regs->msr & MSR_VSX) {
178#ifdef CONFIG_SMP
179 BUG_ON(tsk != current);
180#endif
181 giveup_vsx(tsk);
182 }
183 preempt_enable();
184 }
185}
ce48b210
MN
186#endif /* CONFIG_VSX */
187
14cf11af
PM
188#ifdef CONFIG_SPE
189
190void enable_kernel_spe(void)
191{
192 WARN_ON(preemptible());
193
194#ifdef CONFIG_SMP
195 if (current->thread.regs && (current->thread.regs->msr & MSR_SPE))
196 giveup_spe(current);
197 else
198 giveup_spe(NULL); /* just enable SPE for kernel - force */
199#else
200 giveup_spe(last_task_used_spe);
201#endif /* __SMP __ */
202}
203EXPORT_SYMBOL(enable_kernel_spe);
204
205void flush_spe_to_thread(struct task_struct *tsk)
206{
207 if (tsk->thread.regs) {
208 preempt_disable();
209 if (tsk->thread.regs->msr & MSR_SPE) {
210#ifdef CONFIG_SMP
211 BUG_ON(tsk != current);
212#endif
0ee6c15e 213 giveup_spe(tsk);
14cf11af
PM
214 }
215 preempt_enable();
216 }
217}
14cf11af
PM
218#endif /* CONFIG_SPE */
219
5388fb10 220#ifndef CONFIG_SMP
48abec07
PM
221/*
222 * If we are doing lazy switching of CPU state (FP, altivec or SPE),
223 * and the current task has some state, discard it.
224 */
5388fb10 225void discard_lazy_cpu_state(void)
48abec07 226{
48abec07
PM
227 preempt_disable();
228 if (last_task_used_math == current)
229 last_task_used_math = NULL;
230#ifdef CONFIG_ALTIVEC
231 if (last_task_used_altivec == current)
232 last_task_used_altivec = NULL;
233#endif /* CONFIG_ALTIVEC */
ce48b210
MN
234#ifdef CONFIG_VSX
235 if (last_task_used_vsx == current)
236 last_task_used_vsx = NULL;
237#endif /* CONFIG_VSX */
48abec07
PM
238#ifdef CONFIG_SPE
239 if (last_task_used_spe == current)
240 last_task_used_spe = NULL;
241#endif
242 preempt_enable();
48abec07 243}
5388fb10 244#endif /* CONFIG_SMP */
48abec07 245
d6a61bfc
LM
246void do_dabr(struct pt_regs *regs, unsigned long address,
247 unsigned long error_code)
248{
249 siginfo_t info;
250
251 if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, error_code,
252 11, SIGSEGV) == NOTIFY_STOP)
253 return;
254
255 if (debugger_dabr_match(regs))
256 return;
257
258 /* Clear the DAC and struct entries. One shot trigger */
2325f0a0 259#if defined(CONFIG_BOOKE)
d6a61bfc
LM
260 mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) & ~(DBSR_DAC1R | DBSR_DAC1W
261 | DBCR0_IDM));
262#endif
263
264 /* Clear the DABR */
265 set_dabr(0);
266
267 /* Deliver the signal to userspace */
268 info.si_signo = SIGTRAP;
269 info.si_errno = 0;
270 info.si_code = TRAP_HWBKPT;
271 info.si_addr = (void __user *)address;
272 force_sig_info(SIGTRAP, &info, current);
273}
274
a2ceff5e
ME
275static DEFINE_PER_CPU(unsigned long, current_dabr);
276
14cf11af
PM
277int set_dabr(unsigned long dabr)
278{
a2ceff5e
ME
279 __get_cpu_var(current_dabr) = dabr;
280
cab0af98
ME
281 if (ppc_md.set_dabr)
282 return ppc_md.set_dabr(dabr);
14cf11af 283
791cc501
BH
284 /* XXX should we have a CPU_FTR_HAS_DABR ? */
285#if defined(CONFIG_PPC64) || defined(CONFIG_6xx)
cab0af98 286 mtspr(SPRN_DABR, dabr);
791cc501 287#endif
d6a61bfc 288
2325f0a0 289#if defined(CONFIG_BOOKE)
d6a61bfc
LM
290 mtspr(SPRN_DAC1, dabr);
291#endif
292
cab0af98 293 return 0;
14cf11af
PM
294}
295
06d67d54
PM
296#ifdef CONFIG_PPC64
297DEFINE_PER_CPU(struct cpu_usage, cpu_usage_array);
06d67d54 298#endif
14cf11af
PM
299
300struct task_struct *__switch_to(struct task_struct *prev,
301 struct task_struct *new)
302{
303 struct thread_struct *new_thread, *old_thread;
304 unsigned long flags;
305 struct task_struct *last;
306
307#ifdef CONFIG_SMP
308 /* avoid complexity of lazy save/restore of fpu
309 * by just saving it every time we switch out if
310 * this task used the fpu during the last quantum.
311 *
312 * If it tries to use the fpu again, it'll trap and
313 * reload its fp regs. So we don't have to do a restore
314 * every switch, just a save.
315 * -- Cort
316 */
317 if (prev->thread.regs && (prev->thread.regs->msr & MSR_FP))
318 giveup_fpu(prev);
319#ifdef CONFIG_ALTIVEC
320 /*
321 * If the previous thread used altivec in the last quantum
322 * (thus changing altivec regs) then save them.
323 * We used to check the VRSAVE register but not all apps
324 * set it, so we don't rely on it now (and in fact we need
325 * to save & restore VSCR even if VRSAVE == 0). -- paulus
326 *
327 * On SMP we always save/restore altivec regs just to avoid the
328 * complexity of changing processors.
329 * -- Cort
330 */
331 if (prev->thread.regs && (prev->thread.regs->msr & MSR_VEC))
332 giveup_altivec(prev);
14cf11af 333#endif /* CONFIG_ALTIVEC */
ce48b210
MN
334#ifdef CONFIG_VSX
335 if (prev->thread.regs && (prev->thread.regs->msr & MSR_VSX))
7c292170
MN
336 /* VMX and FPU registers are already save here */
337 __giveup_vsx(prev);
ce48b210 338#endif /* CONFIG_VSX */
14cf11af
PM
339#ifdef CONFIG_SPE
340 /*
341 * If the previous thread used spe in the last quantum
342 * (thus changing spe regs) then save them.
343 *
344 * On SMP we always save/restore spe regs just to avoid the
345 * complexity of changing processors.
346 */
347 if ((prev->thread.regs && (prev->thread.regs->msr & MSR_SPE)))
348 giveup_spe(prev);
c0c0d996
PM
349#endif /* CONFIG_SPE */
350
351#else /* CONFIG_SMP */
352#ifdef CONFIG_ALTIVEC
353 /* Avoid the trap. On smp this this never happens since
354 * we don't set last_task_used_altivec -- Cort
355 */
356 if (new->thread.regs && last_task_used_altivec == new)
357 new->thread.regs->msr |= MSR_VEC;
358#endif /* CONFIG_ALTIVEC */
ce48b210
MN
359#ifdef CONFIG_VSX
360 if (new->thread.regs && last_task_used_vsx == new)
361 new->thread.regs->msr |= MSR_VSX;
362#endif /* CONFIG_VSX */
c0c0d996 363#ifdef CONFIG_SPE
14cf11af
PM
364 /* Avoid the trap. On smp this this never happens since
365 * we don't set last_task_used_spe
366 */
367 if (new->thread.regs && last_task_used_spe == new)
368 new->thread.regs->msr |= MSR_SPE;
369#endif /* CONFIG_SPE */
c0c0d996 370
14cf11af
PM
371#endif /* CONFIG_SMP */
372
a2ceff5e 373 if (unlikely(__get_cpu_var(current_dabr) != new->thread.dabr))
14cf11af 374 set_dabr(new->thread.dabr);
14cf11af 375
2325f0a0 376#if defined(CONFIG_BOOKE)
d6a61bfc
LM
377 /* If new thread DAC (HW breakpoint) is the same then leave it */
378 if (new->thread.dabr)
379 set_dabr(new->thread.dabr);
380#endif
381
14cf11af
PM
382 new_thread = &new->thread;
383 old_thread = &current->thread;
06d67d54
PM
384
385#ifdef CONFIG_PPC64
386 /*
387 * Collect processor utilization data per process
388 */
389 if (firmware_has_feature(FW_FEATURE_SPLPAR)) {
390 struct cpu_usage *cu = &__get_cpu_var(cpu_usage_array);
391 long unsigned start_tb, current_tb;
392 start_tb = old_thread->start_tb;
393 cu->current_tb = current_tb = mfspr(SPRN_PURR);
394 old_thread->accum_tb += (current_tb - start_tb);
395 new_thread->start_tb = current_tb;
396 }
397#endif
398
14cf11af 399 local_irq_save(flags);
c6622f63
PM
400
401 account_system_vtime(current);
81a3843f 402 account_process_vtime(current);
c6622f63
PM
403 calculate_steal_time();
404
44387e9f
AB
405 /*
406 * We can't take a PMU exception inside _switch() since there is a
407 * window where the kernel stack SLB and the kernel stack are out
408 * of sync. Hard disable here.
409 */
410 hard_irq_disable();
14cf11af
PM
411 last = _switch(old_thread, new_thread);
412
413 local_irq_restore(flags);
414
415 return last;
416}
417
06d67d54
PM
418static int instructions_to_print = 16;
419
06d67d54
PM
420static void show_instructions(struct pt_regs *regs)
421{
422 int i;
423 unsigned long pc = regs->nip - (instructions_to_print * 3 / 4 *
424 sizeof(int));
425
426 printk("Instruction dump:");
427
428 for (i = 0; i < instructions_to_print; i++) {
429 int instr;
430
431 if (!(i % 8))
432 printk("\n");
433
0de2d820
SW
434#if !defined(CONFIG_BOOKE)
435 /* If executing with the IMMU off, adjust pc rather
436 * than print XXXXXXXX.
437 */
438 if (!(regs->msr & MSR_IR))
439 pc = (unsigned long)phys_to_virt(pc);
440#endif
441
af308377
SR
442 /* We use __get_user here *only* to avoid an OOPS on a
443 * bad address because the pc *should* only be a
444 * kernel address.
445 */
00ae36de
AB
446 if (!__kernel_text_address(pc) ||
447 __get_user(instr, (unsigned int __user *)pc)) {
06d67d54
PM
448 printk("XXXXXXXX ");
449 } else {
450 if (regs->nip == pc)
451 printk("<%08x> ", instr);
452 else
453 printk("%08x ", instr);
454 }
455
456 pc += sizeof(int);
457 }
458
459 printk("\n");
460}
461
462static struct regbit {
463 unsigned long bit;
464 const char *name;
465} msr_bits[] = {
466 {MSR_EE, "EE"},
467 {MSR_PR, "PR"},
468 {MSR_FP, "FP"},
ce48b210
MN
469 {MSR_VEC, "VEC"},
470 {MSR_VSX, "VSX"},
06d67d54 471 {MSR_ME, "ME"},
1b98326b
KG
472 {MSR_CE, "CE"},
473 {MSR_DE, "DE"},
06d67d54
PM
474 {MSR_IR, "IR"},
475 {MSR_DR, "DR"},
476 {0, NULL}
477};
478
479static void printbits(unsigned long val, struct regbit *bits)
480{
481 const char *sep = "";
482
483 printk("<");
484 for (; bits->bit; ++bits)
485 if (val & bits->bit) {
486 printk("%s%s", sep, bits->name);
487 sep = ",";
488 }
489 printk(">");
490}
491
492#ifdef CONFIG_PPC64
f6f7dde3 493#define REG "%016lx"
06d67d54
PM
494#define REGS_PER_LINE 4
495#define LAST_VOLATILE 13
496#else
f6f7dde3 497#define REG "%08lx"
06d67d54
PM
498#define REGS_PER_LINE 8
499#define LAST_VOLATILE 12
500#endif
501
14cf11af
PM
502void show_regs(struct pt_regs * regs)
503{
504 int i, trap;
505
06d67d54
PM
506 printk("NIP: "REG" LR: "REG" CTR: "REG"\n",
507 regs->nip, regs->link, regs->ctr);
508 printk("REGS: %p TRAP: %04lx %s (%s)\n",
96b644bd 509 regs, regs->trap, print_tainted(), init_utsname()->release);
06d67d54
PM
510 printk("MSR: "REG" ", regs->msr);
511 printbits(regs->msr, msr_bits);
f6f7dde3 512 printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer);
14cf11af
PM
513 trap = TRAP(regs);
514 if (trap == 0x300 || trap == 0x600)
14170789
KG
515#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
516 printk("DEAR: "REG", ESR: "REG"\n", regs->dar, regs->dsisr);
517#else
06d67d54 518 printk("DAR: "REG", DSISR: "REG"\n", regs->dar, regs->dsisr);
14170789 519#endif
06d67d54 520 printk("TASK = %p[%d] '%s' THREAD: %p",
19c5870c 521 current, task_pid_nr(current), current->comm, task_thread_info(current));
14cf11af
PM
522
523#ifdef CONFIG_SMP
79ccd1be 524 printk(" CPU: %d", raw_smp_processor_id());
14cf11af
PM
525#endif /* CONFIG_SMP */
526
527 for (i = 0; i < 32; i++) {
06d67d54 528 if ((i % REGS_PER_LINE) == 0)
14cf11af 529 printk("\n" KERN_INFO "GPR%02d: ", i);
06d67d54
PM
530 printk(REG " ", regs->gpr[i]);
531 if (i == LAST_VOLATILE && !FULL_REGS(regs))
14cf11af
PM
532 break;
533 }
534 printk("\n");
535#ifdef CONFIG_KALLSYMS
536 /*
537 * Lookup NIP late so we have the best change of getting the
538 * above info out without failing
539 */
058c78f4
BH
540 printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip);
541 printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link);
14cf11af
PM
542#endif
543 show_stack(current, (unsigned long *) regs->gpr[1]);
06d67d54
PM
544 if (!user_mode(regs))
545 show_instructions(regs);
14cf11af
PM
546}
547
548void exit_thread(void)
549{
48abec07 550 discard_lazy_cpu_state();
14cf11af
PM
551}
552
553void flush_thread(void)
554{
06d67d54
PM
555#ifdef CONFIG_PPC64
556 struct thread_info *t = current_thread_info();
557
f144e7c7
MD
558 if (test_ti_thread_flag(t, TIF_ABI_PENDING)) {
559 clear_ti_thread_flag(t, TIF_ABI_PENDING);
560 if (test_ti_thread_flag(t, TIF_32BIT))
561 clear_ti_thread_flag(t, TIF_32BIT);
562 else
563 set_ti_thread_flag(t, TIF_32BIT);
564 }
06d67d54 565#endif
06d67d54 566
48abec07 567 discard_lazy_cpu_state();
14cf11af 568
14cf11af
PM
569 if (current->thread.dabr) {
570 current->thread.dabr = 0;
571 set_dabr(0);
d6a61bfc 572
2325f0a0 573#if defined(CONFIG_BOOKE)
d6a61bfc
LM
574 current->thread.dbcr0 &= ~(DBSR_DAC1R | DBSR_DAC1W);
575#endif
14cf11af 576 }
14cf11af
PM
577}
578
579void
580release_thread(struct task_struct *t)
581{
582}
583
584/*
585 * This gets called before we allocate a new thread and copy
586 * the current task into it.
587 */
588void prepare_to_copy(struct task_struct *tsk)
589{
590 flush_fp_to_thread(current);
591 flush_altivec_to_thread(current);
ce48b210 592 flush_vsx_to_thread(current);
14cf11af
PM
593 flush_spe_to_thread(current);
594}
595
596/*
597 * Copy a thread..
598 */
06d67d54
PM
599int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
600 unsigned long unused, struct task_struct *p,
601 struct pt_regs *regs)
14cf11af
PM
602{
603 struct pt_regs *childregs, *kregs;
604 extern void ret_from_fork(void);
0cec6fd1 605 unsigned long sp = (unsigned long)task_stack_page(p) + THREAD_SIZE;
14cf11af
PM
606
607 CHECK_FULL_REGS(regs);
608 /* Copy registers */
609 sp -= sizeof(struct pt_regs);
610 childregs = (struct pt_regs *) sp;
611 *childregs = *regs;
612 if ((childregs->msr & MSR_PR) == 0) {
613 /* for kernel thread, set `current' and stackptr in new task */
614 childregs->gpr[1] = sp + sizeof(struct pt_regs);
06d67d54 615#ifdef CONFIG_PPC32
14cf11af 616 childregs->gpr[2] = (unsigned long) p;
06d67d54 617#else
b5e2fc1c 618 clear_tsk_thread_flag(p, TIF_32BIT);
06d67d54 619#endif
14cf11af
PM
620 p->thread.regs = NULL; /* no user register state */
621 } else {
622 childregs->gpr[1] = usp;
623 p->thread.regs = childregs;
06d67d54
PM
624 if (clone_flags & CLONE_SETTLS) {
625#ifdef CONFIG_PPC64
626 if (!test_thread_flag(TIF_32BIT))
627 childregs->gpr[13] = childregs->gpr[6];
628 else
629#endif
630 childregs->gpr[2] = childregs->gpr[6];
631 }
14cf11af
PM
632 }
633 childregs->gpr[3] = 0; /* Result from fork() */
634 sp -= STACK_FRAME_OVERHEAD;
14cf11af
PM
635
636 /*
637 * The way this works is that at some point in the future
638 * some task will call _switch to switch to the new task.
639 * That will pop off the stack frame created below and start
640 * the new task running at ret_from_fork. The new task will
641 * do some house keeping and then return from the fork or clone
642 * system call, using the stack frame created above.
643 */
644 sp -= sizeof(struct pt_regs);
645 kregs = (struct pt_regs *) sp;
646 sp -= STACK_FRAME_OVERHEAD;
647 p->thread.ksp = sp;
85218827
KG
648 p->thread.ksp_limit = (unsigned long)task_stack_page(p) +
649 _ALIGN_UP(sizeof(struct thread_info), 16);
14cf11af 650
06d67d54
PM
651#ifdef CONFIG_PPC64
652 if (cpu_has_feature(CPU_FTR_SLB)) {
1189be65 653 unsigned long sp_vsid;
3c726f8d 654 unsigned long llp = mmu_psize_defs[mmu_linear_psize].sllp;
06d67d54 655
1189be65
PM
656 if (cpu_has_feature(CPU_FTR_1T_SEGMENT))
657 sp_vsid = get_kernel_vsid(sp, MMU_SEGSIZE_1T)
658 << SLB_VSID_SHIFT_1T;
659 else
660 sp_vsid = get_kernel_vsid(sp, MMU_SEGSIZE_256M)
661 << SLB_VSID_SHIFT;
3c726f8d 662 sp_vsid |= SLB_VSID_KERNEL | llp;
06d67d54
PM
663 p->thread.ksp_vsid = sp_vsid;
664 }
665
666 /*
667 * The PPC64 ABI makes use of a TOC to contain function
668 * pointers. The function (ret_from_except) is actually a pointer
669 * to the TOC entry. The first entry is a pointer to the actual
670 * function.
671 */
672 kregs->nip = *((unsigned long *)ret_from_fork);
673#else
674 kregs->nip = (unsigned long)ret_from_fork;
06d67d54 675#endif
14cf11af
PM
676
677 return 0;
678}
679
680/*
681 * Set up a thread for executing a new program
682 */
06d67d54 683void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
14cf11af 684{
90eac727
ME
685#ifdef CONFIG_PPC64
686 unsigned long load_addr = regs->gpr[2]; /* saved by ELF_PLAT_INIT */
687#endif
688
14cf11af 689 set_fs(USER_DS);
06d67d54
PM
690
691 /*
692 * If we exec out of a kernel thread then thread.regs will not be
693 * set. Do it now.
694 */
695 if (!current->thread.regs) {
0cec6fd1
AV
696 struct pt_regs *regs = task_stack_page(current) + THREAD_SIZE;
697 current->thread.regs = regs - 1;
06d67d54
PM
698 }
699
14cf11af
PM
700 memset(regs->gpr, 0, sizeof(regs->gpr));
701 regs->ctr = 0;
702 regs->link = 0;
703 regs->xer = 0;
704 regs->ccr = 0;
14cf11af 705 regs->gpr[1] = sp;
06d67d54 706
474f8196
RM
707 /*
708 * We have just cleared all the nonvolatile GPRs, so make
709 * FULL_REGS(regs) return true. This is necessary to allow
710 * ptrace to examine the thread immediately after exec.
711 */
712 regs->trap &= ~1UL;
713
06d67d54
PM
714#ifdef CONFIG_PPC32
715 regs->mq = 0;
716 regs->nip = start;
14cf11af 717 regs->msr = MSR_USER;
06d67d54 718#else
d4bf9a78 719 if (!test_thread_flag(TIF_32BIT)) {
90eac727 720 unsigned long entry, toc;
06d67d54
PM
721
722 /* start is a relocated pointer to the function descriptor for
723 * the elf _start routine. The first entry in the function
724 * descriptor is the entry address of _start and the second
725 * entry is the TOC value we need to use.
726 */
727 __get_user(entry, (unsigned long __user *)start);
728 __get_user(toc, (unsigned long __user *)start+1);
729
730 /* Check whether the e_entry function descriptor entries
731 * need to be relocated before we can use them.
732 */
733 if (load_addr != 0) {
734 entry += load_addr;
735 toc += load_addr;
736 }
737 regs->nip = entry;
738 regs->gpr[2] = toc;
739 regs->msr = MSR_USER64;
d4bf9a78
SR
740 } else {
741 regs->nip = start;
742 regs->gpr[2] = 0;
743 regs->msr = MSR_USER32;
06d67d54
PM
744 }
745#endif
746
48abec07 747 discard_lazy_cpu_state();
ce48b210
MN
748#ifdef CONFIG_VSX
749 current->thread.used_vsr = 0;
750#endif
14cf11af 751 memset(current->thread.fpr, 0, sizeof(current->thread.fpr));
25c8a78b 752 current->thread.fpscr.val = 0;
14cf11af
PM
753#ifdef CONFIG_ALTIVEC
754 memset(current->thread.vr, 0, sizeof(current->thread.vr));
755 memset(&current->thread.vscr, 0, sizeof(current->thread.vscr));
06d67d54 756 current->thread.vscr.u[3] = 0x00010000; /* Java mode disabled */
14cf11af
PM
757 current->thread.vrsave = 0;
758 current->thread.used_vr = 0;
759#endif /* CONFIG_ALTIVEC */
760#ifdef CONFIG_SPE
761 memset(current->thread.evr, 0, sizeof(current->thread.evr));
762 current->thread.acc = 0;
763 current->thread.spefscr = 0;
764 current->thread.used_spe = 0;
765#endif /* CONFIG_SPE */
766}
767
768#define PR_FP_ALL_EXCEPT (PR_FP_EXC_DIV | PR_FP_EXC_OVF | PR_FP_EXC_UND \
769 | PR_FP_EXC_RES | PR_FP_EXC_INV)
770
771int set_fpexc_mode(struct task_struct *tsk, unsigned int val)
772{
773 struct pt_regs *regs = tsk->thread.regs;
774
775 /* This is a bit hairy. If we are an SPE enabled processor
776 * (have embedded fp) we store the IEEE exception enable flags in
777 * fpexc_mode. fpexc_mode is also used for setting FP exception
778 * mode (asyn, precise, disabled) for 'Classic' FP. */
779 if (val & PR_FP_EXC_SW_ENABLE) {
780#ifdef CONFIG_SPE
5e14d21e
KG
781 if (cpu_has_feature(CPU_FTR_SPE)) {
782 tsk->thread.fpexc_mode = val &
783 (PR_FP_EXC_SW_ENABLE | PR_FP_ALL_EXCEPT);
784 return 0;
785 } else {
786 return -EINVAL;
787 }
14cf11af
PM
788#else
789 return -EINVAL;
790#endif
14cf11af 791 }
06d67d54
PM
792
793 /* on a CONFIG_SPE this does not hurt us. The bits that
794 * __pack_fe01 use do not overlap with bits used for
795 * PR_FP_EXC_SW_ENABLE. Additionally, the MSR[FE0,FE1] bits
796 * on CONFIG_SPE implementations are reserved so writing to
797 * them does not change anything */
798 if (val > PR_FP_EXC_PRECISE)
799 return -EINVAL;
800 tsk->thread.fpexc_mode = __pack_fe01(val);
801 if (regs != NULL && (regs->msr & MSR_FP) != 0)
802 regs->msr = (regs->msr & ~(MSR_FE0|MSR_FE1))
803 | tsk->thread.fpexc_mode;
14cf11af
PM
804 return 0;
805}
806
807int get_fpexc_mode(struct task_struct *tsk, unsigned long adr)
808{
809 unsigned int val;
810
811 if (tsk->thread.fpexc_mode & PR_FP_EXC_SW_ENABLE)
812#ifdef CONFIG_SPE
5e14d21e
KG
813 if (cpu_has_feature(CPU_FTR_SPE))
814 val = tsk->thread.fpexc_mode;
815 else
816 return -EINVAL;
14cf11af
PM
817#else
818 return -EINVAL;
819#endif
820 else
821 val = __unpack_fe01(tsk->thread.fpexc_mode);
822 return put_user(val, (unsigned int __user *) adr);
823}
824
fab5db97
PM
825int set_endian(struct task_struct *tsk, unsigned int val)
826{
827 struct pt_regs *regs = tsk->thread.regs;
828
829 if ((val == PR_ENDIAN_LITTLE && !cpu_has_feature(CPU_FTR_REAL_LE)) ||
830 (val == PR_ENDIAN_PPC_LITTLE && !cpu_has_feature(CPU_FTR_PPC_LE)))
831 return -EINVAL;
832
833 if (regs == NULL)
834 return -EINVAL;
835
836 if (val == PR_ENDIAN_BIG)
837 regs->msr &= ~MSR_LE;
838 else if (val == PR_ENDIAN_LITTLE || val == PR_ENDIAN_PPC_LITTLE)
839 regs->msr |= MSR_LE;
840 else
841 return -EINVAL;
842
843 return 0;
844}
845
846int get_endian(struct task_struct *tsk, unsigned long adr)
847{
848 struct pt_regs *regs = tsk->thread.regs;
849 unsigned int val;
850
851 if (!cpu_has_feature(CPU_FTR_PPC_LE) &&
852 !cpu_has_feature(CPU_FTR_REAL_LE))
853 return -EINVAL;
854
855 if (regs == NULL)
856 return -EINVAL;
857
858 if (regs->msr & MSR_LE) {
859 if (cpu_has_feature(CPU_FTR_REAL_LE))
860 val = PR_ENDIAN_LITTLE;
861 else
862 val = PR_ENDIAN_PPC_LITTLE;
863 } else
864 val = PR_ENDIAN_BIG;
865
866 return put_user(val, (unsigned int __user *)adr);
867}
868
e9370ae1
PM
869int set_unalign_ctl(struct task_struct *tsk, unsigned int val)
870{
871 tsk->thread.align_ctl = val;
872 return 0;
873}
874
875int get_unalign_ctl(struct task_struct *tsk, unsigned long adr)
876{
877 return put_user(tsk->thread.align_ctl, (unsigned int __user *)adr);
878}
879
06d67d54
PM
880#define TRUNC_PTR(x) ((typeof(x))(((unsigned long)(x)) & 0xffffffff))
881
14cf11af
PM
882int sys_clone(unsigned long clone_flags, unsigned long usp,
883 int __user *parent_tidp, void __user *child_threadptr,
884 int __user *child_tidp, int p6,
885 struct pt_regs *regs)
886{
887 CHECK_FULL_REGS(regs);
888 if (usp == 0)
889 usp = regs->gpr[1]; /* stack pointer for child */
06d67d54
PM
890#ifdef CONFIG_PPC64
891 if (test_thread_flag(TIF_32BIT)) {
892 parent_tidp = TRUNC_PTR(parent_tidp);
893 child_tidp = TRUNC_PTR(child_tidp);
894 }
895#endif
14cf11af
PM
896 return do_fork(clone_flags, usp, regs, 0, parent_tidp, child_tidp);
897}
898
899int sys_fork(unsigned long p1, unsigned long p2, unsigned long p3,
900 unsigned long p4, unsigned long p5, unsigned long p6,
901 struct pt_regs *regs)
902{
903 CHECK_FULL_REGS(regs);
904 return do_fork(SIGCHLD, regs->gpr[1], regs, 0, NULL, NULL);
905}
906
907int sys_vfork(unsigned long p1, unsigned long p2, unsigned long p3,
908 unsigned long p4, unsigned long p5, unsigned long p6,
909 struct pt_regs *regs)
910{
911 CHECK_FULL_REGS(regs);
912 return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->gpr[1],
913 regs, 0, NULL, NULL);
914}
915
916int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
917 unsigned long a3, unsigned long a4, unsigned long a5,
918 struct pt_regs *regs)
919{
920 int error;
06d67d54 921 char *filename;
14cf11af
PM
922
923 filename = getname((char __user *) a0);
924 error = PTR_ERR(filename);
925 if (IS_ERR(filename))
926 goto out;
927 flush_fp_to_thread(current);
928 flush_altivec_to_thread(current);
929 flush_spe_to_thread(current);
20c8c210
PM
930 error = do_execve(filename, (char __user * __user *) a1,
931 (char __user * __user *) a2, regs);
14cf11af
PM
932 putname(filename);
933out:
934 return error;
935}
936
bb72c481
PM
937#ifdef CONFIG_IRQSTACKS
938static inline int valid_irq_stack(unsigned long sp, struct task_struct *p,
939 unsigned long nbytes)
940{
941 unsigned long stack_page;
942 unsigned long cpu = task_cpu(p);
943
944 /*
945 * Avoid crashing if the stack has overflowed and corrupted
946 * task_cpu(p), which is in the thread_info struct.
947 */
948 if (cpu < NR_CPUS && cpu_possible(cpu)) {
949 stack_page = (unsigned long) hardirq_ctx[cpu];
950 if (sp >= stack_page + sizeof(struct thread_struct)
951 && sp <= stack_page + THREAD_SIZE - nbytes)
952 return 1;
953
954 stack_page = (unsigned long) softirq_ctx[cpu];
955 if (sp >= stack_page + sizeof(struct thread_struct)
956 && sp <= stack_page + THREAD_SIZE - nbytes)
957 return 1;
958 }
959 return 0;
960}
961
962#else
963#define valid_irq_stack(sp, p, nb) 0
964#endif /* CONFIG_IRQSTACKS */
965
2f25194d 966int validate_sp(unsigned long sp, struct task_struct *p,
14cf11af
PM
967 unsigned long nbytes)
968{
0cec6fd1 969 unsigned long stack_page = (unsigned long)task_stack_page(p);
14cf11af
PM
970
971 if (sp >= stack_page + sizeof(struct thread_struct)
972 && sp <= stack_page + THREAD_SIZE - nbytes)
973 return 1;
974
bb72c481 975 return valid_irq_stack(sp, p, nbytes);
14cf11af
PM
976}
977
2f25194d
AB
978EXPORT_SYMBOL(validate_sp);
979
14cf11af
PM
980unsigned long get_wchan(struct task_struct *p)
981{
982 unsigned long ip, sp;
983 int count = 0;
984
985 if (!p || p == current || p->state == TASK_RUNNING)
986 return 0;
987
988 sp = p->thread.ksp;
ec2b36b9 989 if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
14cf11af
PM
990 return 0;
991
992 do {
993 sp = *(unsigned long *)sp;
ec2b36b9 994 if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
14cf11af
PM
995 return 0;
996 if (count > 0) {
ec2b36b9 997 ip = ((unsigned long *)sp)[STACK_FRAME_LR_SAVE];
14cf11af
PM
998 if (!in_sched_functions(ip))
999 return ip;
1000 }
1001 } while (count++ < 16);
1002 return 0;
1003}
06d67d54 1004
c4d04be1 1005static int kstack_depth_to_print = CONFIG_PRINT_STACK_DEPTH;
06d67d54
PM
1006
1007void show_stack(struct task_struct *tsk, unsigned long *stack)
1008{
1009 unsigned long sp, ip, lr, newsp;
1010 int count = 0;
1011 int firstframe = 1;
6794c782
SR
1012#ifdef CONFIG_FUNCTION_GRAPH_TRACER
1013 int curr_frame = current->curr_ret_stack;
1014 extern void return_to_handler(void);
1015 unsigned long addr = (unsigned long)return_to_handler;
1016#ifdef CONFIG_PPC64
1017 addr = *(unsigned long*)addr;
1018#endif
1019#endif
06d67d54
PM
1020
1021 sp = (unsigned long) stack;
1022 if (tsk == NULL)
1023 tsk = current;
1024 if (sp == 0) {
1025 if (tsk == current)
1026 asm("mr %0,1" : "=r" (sp));
1027 else
1028 sp = tsk->thread.ksp;
1029 }
1030
1031 lr = 0;
1032 printk("Call Trace:\n");
1033 do {
ec2b36b9 1034 if (!validate_sp(sp, tsk, STACK_FRAME_OVERHEAD))
06d67d54
PM
1035 return;
1036
1037 stack = (unsigned long *) sp;
1038 newsp = stack[0];
ec2b36b9 1039 ip = stack[STACK_FRAME_LR_SAVE];
06d67d54 1040 if (!firstframe || ip != lr) {
058c78f4 1041 printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
6794c782
SR
1042#ifdef CONFIG_FUNCTION_GRAPH_TRACER
1043 if (ip == addr && curr_frame >= 0) {
1044 printk(" (%pS)",
1045 (void *)current->ret_stack[curr_frame].ret);
1046 curr_frame--;
1047 }
1048#endif
06d67d54
PM
1049 if (firstframe)
1050 printk(" (unreliable)");
1051 printk("\n");
1052 }
1053 firstframe = 0;
1054
1055 /*
1056 * See if this is an exception frame.
1057 * We look for the "regshere" marker in the current frame.
1058 */
ec2b36b9
BH
1059 if (validate_sp(sp, tsk, STACK_INT_FRAME_SIZE)
1060 && stack[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
06d67d54
PM
1061 struct pt_regs *regs = (struct pt_regs *)
1062 (sp + STACK_FRAME_OVERHEAD);
06d67d54 1063 lr = regs->link;
058c78f4
BH
1064 printk("--- Exception: %lx at %pS\n LR = %pS\n",
1065 regs->trap, (void *)regs->nip, (void *)lr);
06d67d54
PM
1066 firstframe = 1;
1067 }
1068
1069 sp = newsp;
1070 } while (count++ < kstack_depth_to_print);
1071}
1072
1073void dump_stack(void)
1074{
1075 show_stack(current, NULL);
1076}
1077EXPORT_SYMBOL(dump_stack);
cb2c9b27
AB
1078
1079#ifdef CONFIG_PPC64
1080void ppc64_runlatch_on(void)
1081{
1082 unsigned long ctrl;
1083
1084 if (cpu_has_feature(CPU_FTR_CTRL) && !test_thread_flag(TIF_RUNLATCH)) {
1085 HMT_medium();
1086
1087 ctrl = mfspr(SPRN_CTRLF);
1088 ctrl |= CTRL_RUNLATCH;
1089 mtspr(SPRN_CTRLT, ctrl);
1090
1091 set_thread_flag(TIF_RUNLATCH);
1092 }
1093}
1094
1095void ppc64_runlatch_off(void)
1096{
1097 unsigned long ctrl;
1098
1099 if (cpu_has_feature(CPU_FTR_CTRL) && test_thread_flag(TIF_RUNLATCH)) {
1100 HMT_medium();
1101
1102 clear_thread_flag(TIF_RUNLATCH);
1103
1104 ctrl = mfspr(SPRN_CTRLF);
1105 ctrl &= ~CTRL_RUNLATCH;
1106 mtspr(SPRN_CTRLT, ctrl);
1107 }
1108}
1109#endif
f6a61680
BH
1110
1111#if THREAD_SHIFT < PAGE_SHIFT
1112
1113static struct kmem_cache *thread_info_cache;
1114
1115struct thread_info *alloc_thread_info(struct task_struct *tsk)
1116{
1117 struct thread_info *ti;
1118
1119 ti = kmem_cache_alloc(thread_info_cache, GFP_KERNEL);
1120 if (unlikely(ti == NULL))
1121 return NULL;
1122#ifdef CONFIG_DEBUG_STACK_USAGE
1123 memset(ti, 0, THREAD_SIZE);
1124#endif
1125 return ti;
1126}
1127
1128void free_thread_info(struct thread_info *ti)
1129{
1130 kmem_cache_free(thread_info_cache, ti);
1131}
1132
1133void thread_info_cache_init(void)
1134{
1135 thread_info_cache = kmem_cache_create("thread_info", THREAD_SIZE,
1136 THREAD_SIZE, 0, NULL);
1137 BUG_ON(thread_info_cache == NULL);
1138}
1139
1140#endif /* THREAD_SHIFT < PAGE_SHIFT */