GNU Linux-libre 4.19.286-gnu1
[releases.git] / arch / powerpc / kernel / traps.c
1 /*
2  *  Copyright (C) 1995-1996  Gary Thomas (gdt@linuxppc.org)
3  *  Copyright 2007-2010 Freescale Semiconductor, Inc.
4  *
5  *  This program is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU General Public License
7  *  as published by the Free Software Foundation; either version
8  *  2 of the License, or (at your option) any later version.
9  *
10  *  Modified by Cort Dougan (cort@cs.nmt.edu)
11  *  and Paul Mackerras (paulus@samba.org)
12  */
13
14 /*
15  * This file handles the architecture-dependent parts of hardware exceptions
16  */
17
18 #include <linux/errno.h>
19 #include <linux/sched.h>
20 #include <linux/sched/debug.h>
21 #include <linux/kernel.h>
22 #include <linux/mm.h>
23 #include <linux/pkeys.h>
24 #include <linux/stddef.h>
25 #include <linux/unistd.h>
26 #include <linux/ptrace.h>
27 #include <linux/user.h>
28 #include <linux/interrupt.h>
29 #include <linux/init.h>
30 #include <linux/extable.h>
31 #include <linux/module.h>       /* print_modules */
32 #include <linux/prctl.h>
33 #include <linux/delay.h>
34 #include <linux/kprobes.h>
35 #include <linux/kexec.h>
36 #include <linux/backlight.h>
37 #include <linux/bug.h>
38 #include <linux/kdebug.h>
39 #include <linux/ratelimit.h>
40 #include <linux/context_tracking.h>
41 #include <linux/smp.h>
42 #include <linux/console.h>
43 #include <linux/kmsg_dump.h>
44
45 #include <asm/emulated_ops.h>
46 #include <asm/pgtable.h>
47 #include <linux/uaccess.h>
48 #include <asm/debugfs.h>
49 #include <asm/io.h>
50 #include <asm/machdep.h>
51 #include <asm/rtas.h>
52 #include <asm/pmc.h>
53 #include <asm/reg.h>
54 #ifdef CONFIG_PMAC_BACKLIGHT
55 #include <asm/backlight.h>
56 #endif
57 #ifdef CONFIG_PPC64
58 #include <asm/firmware.h>
59 #include <asm/processor.h>
60 #include <asm/tm.h>
61 #endif
62 #include <asm/kexec.h>
63 #include <asm/ppc-opcode.h>
64 #include <asm/rio.h>
65 #include <asm/fadump.h>
66 #include <asm/switch_to.h>
67 #include <asm/tm.h>
68 #include <asm/debug.h>
69 #include <asm/asm-prototypes.h>
70 #include <asm/hmi.h>
71 #include <sysdev/fsl_pci.h>
72 #include <asm/kprobes.h>
73 #include <asm/stacktrace.h>
74
75 #if defined(CONFIG_DEBUGGER) || defined(CONFIG_KEXEC_CORE)
76 int (*__debugger)(struct pt_regs *regs) __read_mostly;
77 int (*__debugger_ipi)(struct pt_regs *regs) __read_mostly;
78 int (*__debugger_bpt)(struct pt_regs *regs) __read_mostly;
79 int (*__debugger_sstep)(struct pt_regs *regs) __read_mostly;
80 int (*__debugger_iabr_match)(struct pt_regs *regs) __read_mostly;
81 int (*__debugger_break_match)(struct pt_regs *regs) __read_mostly;
82 int (*__debugger_fault_handler)(struct pt_regs *regs) __read_mostly;
83
84 EXPORT_SYMBOL(__debugger);
85 EXPORT_SYMBOL(__debugger_ipi);
86 EXPORT_SYMBOL(__debugger_bpt);
87 EXPORT_SYMBOL(__debugger_sstep);
88 EXPORT_SYMBOL(__debugger_iabr_match);
89 EXPORT_SYMBOL(__debugger_break_match);
90 EXPORT_SYMBOL(__debugger_fault_handler);
91 #endif
92
93 /* Transactional Memory trap debug */
94 #ifdef TM_DEBUG_SW
95 #define TM_DEBUG(x...) printk(KERN_INFO x)
96 #else
97 #define TM_DEBUG(x...) do { } while(0)
98 #endif
99
100 static const char *signame(int signr)
101 {
102         switch (signr) {
103         case SIGBUS:    return "bus error";
104         case SIGFPE:    return "floating point exception";
105         case SIGILL:    return "illegal instruction";
106         case SIGSEGV:   return "segfault";
107         case SIGTRAP:   return "unhandled trap";
108         }
109
110         return "unknown signal";
111 }
112
113 /*
114  * Trap & Exception support
115  */
116
117 #ifdef CONFIG_PMAC_BACKLIGHT
118 static void pmac_backlight_unblank(void)
119 {
120         mutex_lock(&pmac_backlight_mutex);
121         if (pmac_backlight) {
122                 struct backlight_properties *props;
123
124                 props = &pmac_backlight->props;
125                 props->brightness = props->max_brightness;
126                 props->power = FB_BLANK_UNBLANK;
127                 backlight_update_status(pmac_backlight);
128         }
129         mutex_unlock(&pmac_backlight_mutex);
130 }
131 #else
132 static inline void pmac_backlight_unblank(void) { }
133 #endif
134
135 /*
136  * If oops/die is expected to crash the machine, return true here.
137  *
138  * This should not be expected to be 100% accurate, there may be
139  * notifiers registered or other unexpected conditions that may bring
140  * down the kernel. Or if the current process in the kernel is holding
141  * locks or has other critical state, the kernel may become effectively
142  * unusable anyway.
143  */
144 bool die_will_crash(void)
145 {
146         if (should_fadump_crash())
147                 return true;
148         if (kexec_should_crash(current))
149                 return true;
150         if (in_interrupt() || panic_on_oops ||
151                         !current->pid || is_global_init(current))
152                 return true;
153
154         return false;
155 }
156
157 static arch_spinlock_t die_lock = __ARCH_SPIN_LOCK_UNLOCKED;
158 static int die_owner = -1;
159 static unsigned int die_nest_count;
160 static int die_counter;
161
162 extern void panic_flush_kmsg_start(void)
163 {
164         /*
165          * These are mostly taken from kernel/panic.c, but tries to do
166          * relatively minimal work. Don't use delay functions (TB may
167          * be broken), don't crash dump (need to set a firmware log),
168          * don't run notifiers. We do want to get some information to
169          * Linux console.
170          */
171         console_verbose();
172         bust_spinlocks(1);
173 }
174
175 extern void panic_flush_kmsg_end(void)
176 {
177         printk_safe_flush_on_panic();
178         kmsg_dump(KMSG_DUMP_PANIC);
179         bust_spinlocks(0);
180         debug_locks_off();
181         console_flush_on_panic();
182 }
183
184 static unsigned long oops_begin(struct pt_regs *regs)
185 {
186         int cpu;
187         unsigned long flags;
188
189         oops_enter();
190
191         /* racy, but better than risking deadlock. */
192         raw_local_irq_save(flags);
193         cpu = smp_processor_id();
194         if (!arch_spin_trylock(&die_lock)) {
195                 if (cpu == die_owner)
196                         /* nested oops. should stop eventually */;
197                 else
198                         arch_spin_lock(&die_lock);
199         }
200         die_nest_count++;
201         die_owner = cpu;
202         console_verbose();
203         bust_spinlocks(1);
204         if (machine_is(powermac))
205                 pmac_backlight_unblank();
206         return flags;
207 }
208 NOKPROBE_SYMBOL(oops_begin);
209
210 static void oops_end(unsigned long flags, struct pt_regs *regs,
211                                int signr)
212 {
213         bust_spinlocks(0);
214         add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
215         die_nest_count--;
216         oops_exit();
217         printk("\n");
218         if (!die_nest_count) {
219                 /* Nest count reaches zero, release the lock. */
220                 die_owner = -1;
221                 arch_spin_unlock(&die_lock);
222         }
223         raw_local_irq_restore(flags);
224
225         /*
226          * system_reset_excption handles debugger, crash dump, panic, for 0x100
227          */
228         if (TRAP(regs) == 0x100)
229                 return;
230
231         crash_fadump(regs, "die oops");
232
233         if (kexec_should_crash(current))
234                 crash_kexec(regs);
235
236         if (!signr)
237                 return;
238
239         /*
240          * While our oops output is serialised by a spinlock, output
241          * from panic() called below can race and corrupt it. If we
242          * know we are going to panic, delay for 1 second so we have a
243          * chance to get clean backtraces from all CPUs that are oopsing.
244          */
245         if (in_interrupt() || panic_on_oops || !current->pid ||
246             is_global_init(current)) {
247                 mdelay(MSEC_PER_SEC);
248         }
249
250         if (in_interrupt())
251                 panic("Fatal exception in interrupt");
252         if (panic_on_oops)
253                 panic("Fatal exception");
254         make_task_dead(signr);
255 }
256 NOKPROBE_SYMBOL(oops_end);
257
258 static int __die(const char *str, struct pt_regs *regs, long err)
259 {
260         printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter);
261
262         if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
263                 printk("LE ");
264         else
265                 printk("BE ");
266
267         if (IS_ENABLED(CONFIG_PREEMPT))
268                 pr_cont("PREEMPT ");
269
270         if (IS_ENABLED(CONFIG_SMP))
271                 pr_cont("SMP NR_CPUS=%d ", NR_CPUS);
272
273         if (debug_pagealloc_enabled())
274                 pr_cont("DEBUG_PAGEALLOC ");
275
276         if (IS_ENABLED(CONFIG_NUMA))
277                 pr_cont("NUMA ");
278
279         pr_cont("%s\n", ppc_md.name ? ppc_md.name : "");
280
281         if (notify_die(DIE_OOPS, str, regs, err, 255, SIGSEGV) == NOTIFY_STOP)
282                 return 1;
283
284         print_modules();
285         show_regs(regs);
286
287         return 0;
288 }
289 NOKPROBE_SYMBOL(__die);
290
291 void die(const char *str, struct pt_regs *regs, long err)
292 {
293         unsigned long flags;
294
295         /*
296          * system_reset_excption handles debugger, crash dump, panic, for 0x100
297          */
298         if (TRAP(regs) != 0x100) {
299                 if (debugger(regs))
300                         return;
301         }
302
303         flags = oops_begin(regs);
304         if (__die(str, regs, err))
305                 err = 0;
306         oops_end(flags, regs, err);
307 }
308 NOKPROBE_SYMBOL(die);
309
310 void user_single_step_siginfo(struct task_struct *tsk,
311                                 struct pt_regs *regs, siginfo_t *info)
312 {
313         info->si_signo = SIGTRAP;
314         info->si_code = TRAP_TRACE;
315         info->si_addr = (void __user *)regs->nip;
316 }
317
318 static void show_signal_msg(int signr, struct pt_regs *regs, int code,
319                             unsigned long addr)
320 {
321         static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
322                                       DEFAULT_RATELIMIT_BURST);
323
324         if (!show_unhandled_signals)
325                 return;
326
327         if (!unhandled_signal(current, signr))
328                 return;
329
330         if (!__ratelimit(&rs))
331                 return;
332
333         pr_info("%s[%d]: %s (%d) at %lx nip %lx lr %lx code %x",
334                 current->comm, current->pid, signame(signr), signr,
335                 addr, regs->nip, regs->link, code);
336
337         print_vma_addr(KERN_CONT " in ", regs->nip);
338
339         pr_cont("\n");
340
341         show_user_instructions(regs);
342 }
343
344 void _exception_pkey(int signr, struct pt_regs *regs, int code,
345                      unsigned long addr, int key)
346 {
347         siginfo_t info;
348
349         if (!user_mode(regs)) {
350                 die("Exception in kernel mode", regs, signr);
351                 return;
352         }
353
354         show_signal_msg(signr, regs, code, addr);
355
356         if (arch_irqs_disabled() && !arch_irq_disabled_regs(regs))
357                 local_irq_enable();
358
359         current->thread.trap_nr = code;
360
361         /*
362          * Save all the pkey registers AMR/IAMR/UAMOR. Eg: Core dumps need
363          * to capture the content, if the task gets killed.
364          */
365         thread_pkey_regs_save(&current->thread);
366
367         clear_siginfo(&info);
368         info.si_signo = signr;
369         info.si_code = code;
370         info.si_addr = (void __user *) addr;
371         info.si_pkey = key;
372
373         force_sig_info(signr, &info, current);
374 }
375
376 void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
377 {
378         _exception_pkey(signr, regs, code, addr, 0);
379 }
380
381 void system_reset_exception(struct pt_regs *regs)
382 {
383         /*
384          * Avoid crashes in case of nested NMI exceptions. Recoverability
385          * is determined by RI and in_nmi
386          */
387         bool nested = in_nmi();
388         if (!nested)
389                 nmi_enter();
390
391         __this_cpu_inc(irq_stat.sreset_irqs);
392
393         /* See if any machine dependent calls */
394         if (ppc_md.system_reset_exception) {
395                 if (ppc_md.system_reset_exception(regs))
396                         goto out;
397         }
398
399         if (debugger(regs))
400                 goto out;
401
402         kmsg_dump(KMSG_DUMP_OOPS);
403         /*
404          * A system reset is a request to dump, so we always send
405          * it through the crashdump code (if fadump or kdump are
406          * registered).
407          */
408         crash_fadump(regs, "System Reset");
409
410         crash_kexec(regs);
411
412         /*
413          * We aren't the primary crash CPU. We need to send it
414          * to a holding pattern to avoid it ending up in the panic
415          * code.
416          */
417         crash_kexec_secondary(regs);
418
419         /*
420          * No debugger or crash dump registered, print logs then
421          * panic.
422          */
423         die("System Reset", regs, SIGABRT);
424
425         mdelay(2*MSEC_PER_SEC); /* Wait a little while for others to print */
426         add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE);
427         nmi_panic(regs, "System Reset");
428
429 out:
430 #ifdef CONFIG_PPC_BOOK3S_64
431         BUG_ON(get_paca()->in_nmi == 0);
432         if (get_paca()->in_nmi > 1)
433                 die("Unrecoverable nested System Reset", regs, SIGABRT);
434 #endif
435         /* Must die if the interrupt is not recoverable */
436         if (!(regs->msr & MSR_RI)) {
437                 /* For the reason explained in die_mce, nmi_exit before die */
438                 nmi_exit();
439                 die("Unrecoverable System Reset", regs, SIGABRT);
440         }
441
442         if (!nested)
443                 nmi_exit();
444
445         /* What should we do here? We could issue a shutdown or hard reset. */
446 }
447
448 /*
449  * I/O accesses can cause machine checks on powermacs.
450  * Check if the NIP corresponds to the address of a sync
451  * instruction for which there is an entry in the exception
452  * table.
453  * Note that the 601 only takes a machine check on TEA
454  * (transfer error ack) signal assertion, and does not
455  * set any of the top 16 bits of SRR1.
456  *  -- paulus.
457  */
458 static inline int check_io_access(struct pt_regs *regs)
459 {
460 #ifdef CONFIG_PPC32
461         unsigned long msr = regs->msr;
462         const struct exception_table_entry *entry;
463         unsigned int *nip = (unsigned int *)regs->nip;
464
465         if (((msr & 0xffff0000) == 0 || (msr & (0x80000 | 0x40000)))
466             && (entry = search_exception_tables(regs->nip)) != NULL) {
467                 /*
468                  * Check that it's a sync instruction, or somewhere
469                  * in the twi; isync; nop sequence that inb/inw/inl uses.
470                  * As the address is in the exception table
471                  * we should be able to read the instr there.
472                  * For the debug message, we look at the preceding
473                  * load or store.
474                  */
475                 if (*nip == PPC_INST_NOP)
476                         nip -= 2;
477                 else if (*nip == PPC_INST_ISYNC)
478                         --nip;
479                 if (*nip == PPC_INST_SYNC || (*nip >> 26) == OP_TRAP) {
480                         unsigned int rb;
481
482                         --nip;
483                         rb = (*nip >> 11) & 0x1f;
484                         printk(KERN_DEBUG "%s bad port %lx at %p\n",
485                                (*nip & 0x100)? "OUT to": "IN from",
486                                regs->gpr[rb] - _IO_BASE, nip);
487                         regs->msr |= MSR_RI;
488                         regs->nip = extable_fixup(entry);
489                         return 1;
490                 }
491         }
492 #endif /* CONFIG_PPC32 */
493         return 0;
494 }
495
496 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
497 /* On 4xx, the reason for the machine check or program exception
498    is in the ESR. */
499 #define get_reason(regs)        ((regs)->dsisr)
500 #define REASON_FP               ESR_FP
501 #define REASON_ILLEGAL          (ESR_PIL | ESR_PUO)
502 #define REASON_PRIVILEGED       ESR_PPR
503 #define REASON_TRAP             ESR_PTR
504
505 /* single-step stuff */
506 #define single_stepping(regs)   (current->thread.debug.dbcr0 & DBCR0_IC)
507 #define clear_single_step(regs) (current->thread.debug.dbcr0 &= ~DBCR0_IC)
508 #define clear_br_trace(regs)    do {} while(0)
509 #else
510 /* On non-4xx, the reason for the machine check or program
511    exception is in the MSR. */
512 #define get_reason(regs)        ((regs)->msr)
513 #define REASON_TM               SRR1_PROGTM
514 #define REASON_FP               SRR1_PROGFPE
515 #define REASON_ILLEGAL          SRR1_PROGILL
516 #define REASON_PRIVILEGED       SRR1_PROGPRIV
517 #define REASON_TRAP             SRR1_PROGTRAP
518
519 #define single_stepping(regs)   ((regs)->msr & MSR_SE)
520 #define clear_single_step(regs) ((regs)->msr &= ~MSR_SE)
521 #define clear_br_trace(regs)    ((regs)->msr &= ~MSR_BE)
522 #endif
523
524 #if defined(CONFIG_E500)
525 int machine_check_e500mc(struct pt_regs *regs)
526 {
527         unsigned long mcsr = mfspr(SPRN_MCSR);
528         unsigned long pvr = mfspr(SPRN_PVR);
529         unsigned long reason = mcsr;
530         int recoverable = 1;
531
532         if (reason & MCSR_LD) {
533                 recoverable = fsl_rio_mcheck_exception(regs);
534                 if (recoverable == 1)
535                         goto silent_out;
536         }
537
538         printk("Machine check in kernel mode.\n");
539         printk("Caused by (from MCSR=%lx): ", reason);
540
541         if (reason & MCSR_MCP)
542                 printk("Machine Check Signal\n");
543
544         if (reason & MCSR_ICPERR) {
545                 printk("Instruction Cache Parity Error\n");
546
547                 /*
548                  * This is recoverable by invalidating the i-cache.
549                  */
550                 mtspr(SPRN_L1CSR1, mfspr(SPRN_L1CSR1) | L1CSR1_ICFI);
551                 while (mfspr(SPRN_L1CSR1) & L1CSR1_ICFI)
552                         ;
553
554                 /*
555                  * This will generally be accompanied by an instruction
556                  * fetch error report -- only treat MCSR_IF as fatal
557                  * if it wasn't due to an L1 parity error.
558                  */
559                 reason &= ~MCSR_IF;
560         }
561
562         if (reason & MCSR_DCPERR_MC) {
563                 printk("Data Cache Parity Error\n");
564
565                 /*
566                  * In write shadow mode we auto-recover from the error, but it
567                  * may still get logged and cause a machine check.  We should
568                  * only treat the non-write shadow case as non-recoverable.
569                  */
570                 /* On e6500 core, L1 DCWS (Data cache write shadow mode) bit
571                  * is not implemented but L1 data cache always runs in write
572                  * shadow mode. Hence on data cache parity errors HW will
573                  * automatically invalidate the L1 Data Cache.
574                  */
575                 if (PVR_VER(pvr) != PVR_VER_E6500) {
576                         if (!(mfspr(SPRN_L1CSR2) & L1CSR2_DCWS))
577                                 recoverable = 0;
578                 }
579         }
580
581         if (reason & MCSR_L2MMU_MHIT) {
582                 printk("Hit on multiple TLB entries\n");
583                 recoverable = 0;
584         }
585
586         if (reason & MCSR_NMI)
587                 printk("Non-maskable interrupt\n");
588
589         if (reason & MCSR_IF) {
590                 printk("Instruction Fetch Error Report\n");
591                 recoverable = 0;
592         }
593
594         if (reason & MCSR_LD) {
595                 printk("Load Error Report\n");
596                 recoverable = 0;
597         }
598
599         if (reason & MCSR_ST) {
600                 printk("Store Error Report\n");
601                 recoverable = 0;
602         }
603
604         if (reason & MCSR_LDG) {
605                 printk("Guarded Load Error Report\n");
606                 recoverable = 0;
607         }
608
609         if (reason & MCSR_TLBSYNC)
610                 printk("Simultaneous tlbsync operations\n");
611
612         if (reason & MCSR_BSL2_ERR) {
613                 printk("Level 2 Cache Error\n");
614                 recoverable = 0;
615         }
616
617         if (reason & MCSR_MAV) {
618                 u64 addr;
619
620                 addr = mfspr(SPRN_MCAR);
621                 addr |= (u64)mfspr(SPRN_MCARU) << 32;
622
623                 printk("Machine Check %s Address: %#llx\n",
624                        reason & MCSR_MEA ? "Effective" : "Physical", addr);
625         }
626
627 silent_out:
628         mtspr(SPRN_MCSR, mcsr);
629         return mfspr(SPRN_MCSR) == 0 && recoverable;
630 }
631
632 int machine_check_e500(struct pt_regs *regs)
633 {
634         unsigned long reason = mfspr(SPRN_MCSR);
635
636         if (reason & MCSR_BUS_RBERR) {
637                 if (fsl_rio_mcheck_exception(regs))
638                         return 1;
639                 if (fsl_pci_mcheck_exception(regs))
640                         return 1;
641         }
642
643         printk("Machine check in kernel mode.\n");
644         printk("Caused by (from MCSR=%lx): ", reason);
645
646         if (reason & MCSR_MCP)
647                 printk("Machine Check Signal\n");
648         if (reason & MCSR_ICPERR)
649                 printk("Instruction Cache Parity Error\n");
650         if (reason & MCSR_DCP_PERR)
651                 printk("Data Cache Push Parity Error\n");
652         if (reason & MCSR_DCPERR)
653                 printk("Data Cache Parity Error\n");
654         if (reason & MCSR_BUS_IAERR)
655                 printk("Bus - Instruction Address Error\n");
656         if (reason & MCSR_BUS_RAERR)
657                 printk("Bus - Read Address Error\n");
658         if (reason & MCSR_BUS_WAERR)
659                 printk("Bus - Write Address Error\n");
660         if (reason & MCSR_BUS_IBERR)
661                 printk("Bus - Instruction Data Error\n");
662         if (reason & MCSR_BUS_RBERR)
663                 printk("Bus - Read Data Bus Error\n");
664         if (reason & MCSR_BUS_WBERR)
665                 printk("Bus - Write Data Bus Error\n");
666         if (reason & MCSR_BUS_IPERR)
667                 printk("Bus - Instruction Parity Error\n");
668         if (reason & MCSR_BUS_RPERR)
669                 printk("Bus - Read Parity Error\n");
670
671         return 0;
672 }
673
674 int machine_check_generic(struct pt_regs *regs)
675 {
676         return 0;
677 }
678 #elif defined(CONFIG_E200)
679 int machine_check_e200(struct pt_regs *regs)
680 {
681         unsigned long reason = mfspr(SPRN_MCSR);
682
683         printk("Machine check in kernel mode.\n");
684         printk("Caused by (from MCSR=%lx): ", reason);
685
686         if (reason & MCSR_MCP)
687                 printk("Machine Check Signal\n");
688         if (reason & MCSR_CP_PERR)
689                 printk("Cache Push Parity Error\n");
690         if (reason & MCSR_CPERR)
691                 printk("Cache Parity Error\n");
692         if (reason & MCSR_EXCP_ERR)
693                 printk("ISI, ITLB, or Bus Error on first instruction fetch for an exception handler\n");
694         if (reason & MCSR_BUS_IRERR)
695                 printk("Bus - Read Bus Error on instruction fetch\n");
696         if (reason & MCSR_BUS_DRERR)
697                 printk("Bus - Read Bus Error on data load\n");
698         if (reason & MCSR_BUS_WRERR)
699                 printk("Bus - Write Bus Error on buffered store or cache line push\n");
700
701         return 0;
702 }
703 #elif defined(CONFIG_PPC32)
704 int machine_check_generic(struct pt_regs *regs)
705 {
706         unsigned long reason = regs->msr;
707
708         printk("Machine check in kernel mode.\n");
709         printk("Caused by (from SRR1=%lx): ", reason);
710         switch (reason & 0x601F0000) {
711         case 0x80000:
712                 printk("Machine check signal\n");
713                 break;
714         case 0:         /* for 601 */
715         case 0x40000:
716         case 0x140000:  /* 7450 MSS error and TEA */
717                 printk("Transfer error ack signal\n");
718                 break;
719         case 0x20000:
720                 printk("Data parity error signal\n");
721                 break;
722         case 0x10000:
723                 printk("Address parity error signal\n");
724                 break;
725         case 0x20000000:
726                 printk("L1 Data Cache error\n");
727                 break;
728         case 0x40000000:
729                 printk("L1 Instruction Cache error\n");
730                 break;
731         case 0x00100000:
732                 printk("L2 data cache parity error\n");
733                 break;
734         default:
735                 printk("Unknown values in msr\n");
736         }
737         return 0;
738 }
739 #endif /* everything else */
740
741 void machine_check_exception(struct pt_regs *regs)
742 {
743         int recover = 0;
744         bool nested = in_nmi();
745         if (!nested)
746                 nmi_enter();
747
748         /* 64s accounts the mce in machine_check_early when in HVMODE */
749         if (!IS_ENABLED(CONFIG_PPC_BOOK3S_64) || !cpu_has_feature(CPU_FTR_HVMODE))
750                 __this_cpu_inc(irq_stat.mce_exceptions);
751
752         add_taint(TAINT_MACHINE_CHECK, LOCKDEP_NOW_UNRELIABLE);
753
754         /* See if any machine dependent calls. In theory, we would want
755          * to call the CPU first, and call the ppc_md. one if the CPU
756          * one returns a positive number. However there is existing code
757          * that assumes the board gets a first chance, so let's keep it
758          * that way for now and fix things later. --BenH.
759          */
760         if (ppc_md.machine_check_exception)
761                 recover = ppc_md.machine_check_exception(regs);
762         else if (cur_cpu_spec->machine_check)
763                 recover = cur_cpu_spec->machine_check(regs);
764
765         if (recover > 0)
766                 goto bail;
767
768         if (debugger_fault_handler(regs))
769                 goto bail;
770
771         if (check_io_access(regs))
772                 goto bail;
773
774         if (!nested)
775                 nmi_exit();
776
777         die("Machine check", regs, SIGBUS);
778
779         /* Must die if the interrupt is not recoverable */
780         if (!(regs->msr & MSR_RI))
781                 die("Unrecoverable Machine check", regs, SIGBUS);
782
783         return;
784
785 bail:
786         if (!nested)
787                 nmi_exit();
788 }
789
790 void SMIException(struct pt_regs *regs)
791 {
792         die("System Management Interrupt", regs, SIGABRT);
793 }
794
795 #ifdef CONFIG_VSX
796 static void p9_hmi_special_emu(struct pt_regs *regs)
797 {
798         unsigned int ra, rb, t, i, sel, instr, rc;
799         const void __user *addr;
800         u8 vbuf[16] __aligned(16), *vdst;
801         unsigned long ea, msr, msr_mask;
802         bool swap;
803
804         if (__get_user_inatomic(instr, (unsigned int __user *)regs->nip))
805                 return;
806
807         /*
808          * lxvb16x      opcode: 0x7c0006d8
809          * lxvd2x       opcode: 0x7c000698
810          * lxvh8x       opcode: 0x7c000658
811          * lxvw4x       opcode: 0x7c000618
812          */
813         if ((instr & 0xfc00073e) != 0x7c000618) {
814                 pr_devel("HMI vec emu: not vector CI %i:%s[%d] nip=%016lx"
815                          " instr=%08x\n",
816                          smp_processor_id(), current->comm, current->pid,
817                          regs->nip, instr);
818                 return;
819         }
820
821         /* Grab vector registers into the task struct */
822         msr = regs->msr; /* Grab msr before we flush the bits */
823         flush_vsx_to_thread(current);
824         enable_kernel_altivec();
825
826         /*
827          * Is userspace running with a different endian (this is rare but
828          * not impossible)
829          */
830         swap = (msr & MSR_LE) != (MSR_KERNEL & MSR_LE);
831
832         /* Decode the instruction */
833         ra = (instr >> 16) & 0x1f;
834         rb = (instr >> 11) & 0x1f;
835         t = (instr >> 21) & 0x1f;
836         if (instr & 1)
837                 vdst = (u8 *)&current->thread.vr_state.vr[t];
838         else
839                 vdst = (u8 *)&current->thread.fp_state.fpr[t][0];
840
841         /* Grab the vector address */
842         ea = regs->gpr[rb] + (ra ? regs->gpr[ra] : 0);
843         if (is_32bit_task())
844                 ea &= 0xfffffffful;
845         addr = (__force const void __user *)ea;
846
847         /* Check it */
848         if (!access_ok(VERIFY_READ, addr, 16)) {
849                 pr_devel("HMI vec emu: bad access %i:%s[%d] nip=%016lx"
850                          " instr=%08x addr=%016lx\n",
851                          smp_processor_id(), current->comm, current->pid,
852                          regs->nip, instr, (unsigned long)addr);
853                 return;
854         }
855
856         /* Read the vector */
857         rc = 0;
858         if ((unsigned long)addr & 0xfUL)
859                 /* unaligned case */
860                 rc = __copy_from_user_inatomic(vbuf, addr, 16);
861         else
862                 __get_user_atomic_128_aligned(vbuf, addr, rc);
863         if (rc) {
864                 pr_devel("HMI vec emu: page fault %i:%s[%d] nip=%016lx"
865                          " instr=%08x addr=%016lx\n",
866                          smp_processor_id(), current->comm, current->pid,
867                          regs->nip, instr, (unsigned long)addr);
868                 return;
869         }
870
871         pr_devel("HMI vec emu: emulated vector CI %i:%s[%d] nip=%016lx"
872                  " instr=%08x addr=%016lx\n",
873                  smp_processor_id(), current->comm, current->pid, regs->nip,
874                  instr, (unsigned long) addr);
875
876         /* Grab instruction "selector" */
877         sel = (instr >> 6) & 3;
878
879         /*
880          * Check to make sure the facility is actually enabled. This
881          * could happen if we get a false positive hit.
882          *
883          * lxvd2x/lxvw4x always check MSR VSX sel = 0,2
884          * lxvh8x/lxvb16x check MSR VSX or VEC depending on VSR used sel = 1,3
885          */
886         msr_mask = MSR_VSX;
887         if ((sel & 1) && (instr & 1)) /* lxvh8x & lxvb16x + VSR >= 32 */
888                 msr_mask = MSR_VEC;
889         if (!(msr & msr_mask)) {
890                 pr_devel("HMI vec emu: MSR fac clear %i:%s[%d] nip=%016lx"
891                          " instr=%08x msr:%016lx\n",
892                          smp_processor_id(), current->comm, current->pid,
893                          regs->nip, instr, msr);
894                 return;
895         }
896
897         /* Do logging here before we modify sel based on endian */
898         switch (sel) {
899         case 0: /* lxvw4x */
900                 PPC_WARN_EMULATED(lxvw4x, regs);
901                 break;
902         case 1: /* lxvh8x */
903                 PPC_WARN_EMULATED(lxvh8x, regs);
904                 break;
905         case 2: /* lxvd2x */
906                 PPC_WARN_EMULATED(lxvd2x, regs);
907                 break;
908         case 3: /* lxvb16x */
909                 PPC_WARN_EMULATED(lxvb16x, regs);
910                 break;
911         }
912
913 #ifdef __LITTLE_ENDIAN__
914         /*
915          * An LE kernel stores the vector in the task struct as an LE
916          * byte array (effectively swapping both the components and
917          * the content of the components). Those instructions expect
918          * the components to remain in ascending address order, so we
919          * swap them back.
920          *
921          * If we are running a BE user space, the expectation is that
922          * of a simple memcpy, so forcing the emulation to look like
923          * a lxvb16x should do the trick.
924          */
925         if (swap)
926                 sel = 3;
927
928         switch (sel) {
929         case 0: /* lxvw4x */
930                 for (i = 0; i < 4; i++)
931                         ((u32 *)vdst)[i] = ((u32 *)vbuf)[3-i];
932                 break;
933         case 1: /* lxvh8x */
934                 for (i = 0; i < 8; i++)
935                         ((u16 *)vdst)[i] = ((u16 *)vbuf)[7-i];
936                 break;
937         case 2: /* lxvd2x */
938                 for (i = 0; i < 2; i++)
939                         ((u64 *)vdst)[i] = ((u64 *)vbuf)[1-i];
940                 break;
941         case 3: /* lxvb16x */
942                 for (i = 0; i < 16; i++)
943                         vdst[i] = vbuf[15-i];
944                 break;
945         }
946 #else /* __LITTLE_ENDIAN__ */
947         /* On a big endian kernel, a BE userspace only needs a memcpy */
948         if (!swap)
949                 sel = 3;
950
951         /* Otherwise, we need to swap the content of the components */
952         switch (sel) {
953         case 0: /* lxvw4x */
954                 for (i = 0; i < 4; i++)
955                         ((u32 *)vdst)[i] = cpu_to_le32(((u32 *)vbuf)[i]);
956                 break;
957         case 1: /* lxvh8x */
958                 for (i = 0; i < 8; i++)
959                         ((u16 *)vdst)[i] = cpu_to_le16(((u16 *)vbuf)[i]);
960                 break;
961         case 2: /* lxvd2x */
962                 for (i = 0; i < 2; i++)
963                         ((u64 *)vdst)[i] = cpu_to_le64(((u64 *)vbuf)[i]);
964                 break;
965         case 3: /* lxvb16x */
966                 memcpy(vdst, vbuf, 16);
967                 break;
968         }
969 #endif /* !__LITTLE_ENDIAN__ */
970
971         /* Go to next instruction */
972         regs->nip += 4;
973 }
974 #endif /* CONFIG_VSX */
975
976 void handle_hmi_exception(struct pt_regs *regs)
977 {
978         struct pt_regs *old_regs;
979
980         old_regs = set_irq_regs(regs);
981         irq_enter();
982
983 #ifdef CONFIG_VSX
984         /* Real mode flagged P9 special emu is needed */
985         if (local_paca->hmi_p9_special_emu) {
986                 local_paca->hmi_p9_special_emu = 0;
987
988                 /*
989                  * We don't want to take page faults while doing the
990                  * emulation, we just replay the instruction if necessary.
991                  */
992                 pagefault_disable();
993                 p9_hmi_special_emu(regs);
994                 pagefault_enable();
995         }
996 #endif /* CONFIG_VSX */
997
998         if (ppc_md.handle_hmi_exception)
999                 ppc_md.handle_hmi_exception(regs);
1000
1001         irq_exit();
1002         set_irq_regs(old_regs);
1003 }
1004
1005 void unknown_exception(struct pt_regs *regs)
1006 {
1007         enum ctx_state prev_state = exception_enter();
1008
1009         printk("Bad trap at PC: %lx, SR: %lx, vector=%lx\n",
1010                regs->nip, regs->msr, regs->trap);
1011
1012         _exception(SIGTRAP, regs, TRAP_UNK, 0);
1013
1014         exception_exit(prev_state);
1015 }
1016
1017 void instruction_breakpoint_exception(struct pt_regs *regs)
1018 {
1019         enum ctx_state prev_state = exception_enter();
1020
1021         if (notify_die(DIE_IABR_MATCH, "iabr_match", regs, 5,
1022                                         5, SIGTRAP) == NOTIFY_STOP)
1023                 goto bail;
1024         if (debugger_iabr_match(regs))
1025                 goto bail;
1026         _exception(SIGTRAP, regs, TRAP_BRKPT, regs->nip);
1027
1028 bail:
1029         exception_exit(prev_state);
1030 }
1031
1032 void RunModeException(struct pt_regs *regs)
1033 {
1034         _exception(SIGTRAP, regs, TRAP_UNK, 0);
1035 }
1036
1037 void single_step_exception(struct pt_regs *regs)
1038 {
1039         enum ctx_state prev_state = exception_enter();
1040
1041         clear_single_step(regs);
1042         clear_br_trace(regs);
1043
1044         if (kprobe_post_handler(regs))
1045                 return;
1046
1047         if (notify_die(DIE_SSTEP, "single_step", regs, 5,
1048                                         5, SIGTRAP) == NOTIFY_STOP)
1049                 goto bail;
1050         if (debugger_sstep(regs))
1051                 goto bail;
1052
1053         _exception(SIGTRAP, regs, TRAP_TRACE, regs->nip);
1054
1055 bail:
1056         exception_exit(prev_state);
1057 }
1058 NOKPROBE_SYMBOL(single_step_exception);
1059
1060 /*
1061  * After we have successfully emulated an instruction, we have to
1062  * check if the instruction was being single-stepped, and if so,
1063  * pretend we got a single-step exception.  This was pointed out
1064  * by Kumar Gala.  -- paulus
1065  */
1066 static void emulate_single_step(struct pt_regs *regs)
1067 {
1068         if (single_stepping(regs))
1069                 single_step_exception(regs);
1070 }
1071
1072 static inline int __parse_fpscr(unsigned long fpscr)
1073 {
1074         int ret = FPE_FLTUNK;
1075
1076         /* Invalid operation */
1077         if ((fpscr & FPSCR_VE) && (fpscr & FPSCR_VX))
1078                 ret = FPE_FLTINV;
1079
1080         /* Overflow */
1081         else if ((fpscr & FPSCR_OE) && (fpscr & FPSCR_OX))
1082                 ret = FPE_FLTOVF;
1083
1084         /* Underflow */
1085         else if ((fpscr & FPSCR_UE) && (fpscr & FPSCR_UX))
1086                 ret = FPE_FLTUND;
1087
1088         /* Divide by zero */
1089         else if ((fpscr & FPSCR_ZE) && (fpscr & FPSCR_ZX))
1090                 ret = FPE_FLTDIV;
1091
1092         /* Inexact result */
1093         else if ((fpscr & FPSCR_XE) && (fpscr & FPSCR_XX))
1094                 ret = FPE_FLTRES;
1095
1096         return ret;
1097 }
1098
1099 static void parse_fpe(struct pt_regs *regs)
1100 {
1101         int code = 0;
1102
1103         flush_fp_to_thread(current);
1104
1105         code = __parse_fpscr(current->thread.fp_state.fpscr);
1106
1107         _exception(SIGFPE, regs, code, regs->nip);
1108 }
1109
1110 /*
1111  * Illegal instruction emulation support.  Originally written to
1112  * provide the PVR to user applications using the mfspr rd, PVR.
1113  * Return non-zero if we can't emulate, or -EFAULT if the associated
1114  * memory access caused an access fault.  Return zero on success.
1115  *
1116  * There are a couple of ways to do this, either "decode" the instruction
1117  * or directly match lots of bits.  In this case, matching lots of
1118  * bits is faster and easier.
1119  *
1120  */
1121 static int emulate_string_inst(struct pt_regs *regs, u32 instword)
1122 {
1123         u8 rT = (instword >> 21) & 0x1f;
1124         u8 rA = (instword >> 16) & 0x1f;
1125         u8 NB_RB = (instword >> 11) & 0x1f;
1126         u32 num_bytes;
1127         unsigned long EA;
1128         int pos = 0;
1129
1130         /* Early out if we are an invalid form of lswx */
1131         if ((instword & PPC_INST_STRING_MASK) == PPC_INST_LSWX)
1132                 if ((rT == rA) || (rT == NB_RB))
1133                         return -EINVAL;
1134
1135         EA = (rA == 0) ? 0 : regs->gpr[rA];
1136
1137         switch (instword & PPC_INST_STRING_MASK) {
1138                 case PPC_INST_LSWX:
1139                 case PPC_INST_STSWX:
1140                         EA += NB_RB;
1141                         num_bytes = regs->xer & 0x7f;
1142                         break;
1143                 case PPC_INST_LSWI:
1144                 case PPC_INST_STSWI:
1145                         num_bytes = (NB_RB == 0) ? 32 : NB_RB;
1146                         break;
1147                 default:
1148                         return -EINVAL;
1149         }
1150
1151         while (num_bytes != 0)
1152         {
1153                 u8 val;
1154                 u32 shift = 8 * (3 - (pos & 0x3));
1155
1156                 /* if process is 32-bit, clear upper 32 bits of EA */
1157                 if ((regs->msr & MSR_64BIT) == 0)
1158                         EA &= 0xFFFFFFFF;
1159
1160                 switch ((instword & PPC_INST_STRING_MASK)) {
1161                         case PPC_INST_LSWX:
1162                         case PPC_INST_LSWI:
1163                                 if (get_user(val, (u8 __user *)EA))
1164                                         return -EFAULT;
1165                                 /* first time updating this reg,
1166                                  * zero it out */
1167                                 if (pos == 0)
1168                                         regs->gpr[rT] = 0;
1169                                 regs->gpr[rT] |= val << shift;
1170                                 break;
1171                         case PPC_INST_STSWI:
1172                         case PPC_INST_STSWX:
1173                                 val = regs->gpr[rT] >> shift;
1174                                 if (put_user(val, (u8 __user *)EA))
1175                                         return -EFAULT;
1176                                 break;
1177                 }
1178                 /* move EA to next address */
1179                 EA += 1;
1180                 num_bytes--;
1181
1182                 /* manage our position within the register */
1183                 if (++pos == 4) {
1184                         pos = 0;
1185                         if (++rT == 32)
1186                                 rT = 0;
1187                 }
1188         }
1189
1190         return 0;
1191 }
1192
1193 static int emulate_popcntb_inst(struct pt_regs *regs, u32 instword)
1194 {
1195         u32 ra,rs;
1196         unsigned long tmp;
1197
1198         ra = (instword >> 16) & 0x1f;
1199         rs = (instword >> 21) & 0x1f;
1200
1201         tmp = regs->gpr[rs];
1202         tmp = tmp - ((tmp >> 1) & 0x5555555555555555ULL);
1203         tmp = (tmp & 0x3333333333333333ULL) + ((tmp >> 2) & 0x3333333333333333ULL);
1204         tmp = (tmp + (tmp >> 4)) & 0x0f0f0f0f0f0f0f0fULL;
1205         regs->gpr[ra] = tmp;
1206
1207         return 0;
1208 }
1209
1210 static int emulate_isel(struct pt_regs *regs, u32 instword)
1211 {
1212         u8 rT = (instword >> 21) & 0x1f;
1213         u8 rA = (instword >> 16) & 0x1f;
1214         u8 rB = (instword >> 11) & 0x1f;
1215         u8 BC = (instword >> 6) & 0x1f;
1216         u8 bit;
1217         unsigned long tmp;
1218
1219         tmp = (rA == 0) ? 0 : regs->gpr[rA];
1220         bit = (regs->ccr >> (31 - BC)) & 0x1;
1221
1222         regs->gpr[rT] = bit ? tmp : regs->gpr[rB];
1223
1224         return 0;
1225 }
1226
1227 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1228 static inline bool tm_abort_check(struct pt_regs *regs, int cause)
1229 {
1230         /* If we're emulating a load/store in an active transaction, we cannot
1231          * emulate it as the kernel operates in transaction suspended context.
1232          * We need to abort the transaction.  This creates a persistent TM
1233          * abort so tell the user what caused it with a new code.
1234          */
1235         if (MSR_TM_TRANSACTIONAL(regs->msr)) {
1236                 tm_enable();
1237                 tm_abort(cause);
1238                 return true;
1239         }
1240         return false;
1241 }
1242 #else
1243 static inline bool tm_abort_check(struct pt_regs *regs, int reason)
1244 {
1245         return false;
1246 }
1247 #endif
1248
1249 static int emulate_instruction(struct pt_regs *regs)
1250 {
1251         u32 instword;
1252         u32 rd;
1253
1254         if (!user_mode(regs))
1255                 return -EINVAL;
1256         CHECK_FULL_REGS(regs);
1257
1258         if (get_user(instword, (u32 __user *)(regs->nip)))
1259                 return -EFAULT;
1260
1261         /* Emulate the mfspr rD, PVR. */
1262         if ((instword & PPC_INST_MFSPR_PVR_MASK) == PPC_INST_MFSPR_PVR) {
1263                 PPC_WARN_EMULATED(mfpvr, regs);
1264                 rd = (instword >> 21) & 0x1f;
1265                 regs->gpr[rd] = mfspr(SPRN_PVR);
1266                 return 0;
1267         }
1268
1269         /* Emulating the dcba insn is just a no-op.  */
1270         if ((instword & PPC_INST_DCBA_MASK) == PPC_INST_DCBA) {
1271                 PPC_WARN_EMULATED(dcba, regs);
1272                 return 0;
1273         }
1274
1275         /* Emulate the mcrxr insn.  */
1276         if ((instword & PPC_INST_MCRXR_MASK) == PPC_INST_MCRXR) {
1277                 int shift = (instword >> 21) & 0x1c;
1278                 unsigned long msk = 0xf0000000UL >> shift;
1279
1280                 PPC_WARN_EMULATED(mcrxr, regs);
1281                 regs->ccr = (regs->ccr & ~msk) | ((regs->xer >> shift) & msk);
1282                 regs->xer &= ~0xf0000000UL;
1283                 return 0;
1284         }
1285
1286         /* Emulate load/store string insn. */
1287         if ((instword & PPC_INST_STRING_GEN_MASK) == PPC_INST_STRING) {
1288                 if (tm_abort_check(regs,
1289                                    TM_CAUSE_EMULATE | TM_CAUSE_PERSISTENT))
1290                         return -EINVAL;
1291                 PPC_WARN_EMULATED(string, regs);
1292                 return emulate_string_inst(regs, instword);
1293         }
1294
1295         /* Emulate the popcntb (Population Count Bytes) instruction. */
1296         if ((instword & PPC_INST_POPCNTB_MASK) == PPC_INST_POPCNTB) {
1297                 PPC_WARN_EMULATED(popcntb, regs);
1298                 return emulate_popcntb_inst(regs, instword);
1299         }
1300
1301         /* Emulate isel (Integer Select) instruction */
1302         if ((instword & PPC_INST_ISEL_MASK) == PPC_INST_ISEL) {
1303                 PPC_WARN_EMULATED(isel, regs);
1304                 return emulate_isel(regs, instword);
1305         }
1306
1307         /* Emulate sync instruction variants */
1308         if ((instword & PPC_INST_SYNC_MASK) == PPC_INST_SYNC) {
1309                 PPC_WARN_EMULATED(sync, regs);
1310                 asm volatile("sync");
1311                 return 0;
1312         }
1313
1314 #ifdef CONFIG_PPC64
1315         /* Emulate the mfspr rD, DSCR. */
1316         if ((((instword & PPC_INST_MFSPR_DSCR_USER_MASK) ==
1317                 PPC_INST_MFSPR_DSCR_USER) ||
1318              ((instword & PPC_INST_MFSPR_DSCR_MASK) ==
1319                 PPC_INST_MFSPR_DSCR)) &&
1320                         cpu_has_feature(CPU_FTR_DSCR)) {
1321                 PPC_WARN_EMULATED(mfdscr, regs);
1322                 rd = (instword >> 21) & 0x1f;
1323                 regs->gpr[rd] = mfspr(SPRN_DSCR);
1324                 return 0;
1325         }
1326         /* Emulate the mtspr DSCR, rD. */
1327         if ((((instword & PPC_INST_MTSPR_DSCR_USER_MASK) ==
1328                 PPC_INST_MTSPR_DSCR_USER) ||
1329              ((instword & PPC_INST_MTSPR_DSCR_MASK) ==
1330                 PPC_INST_MTSPR_DSCR)) &&
1331                         cpu_has_feature(CPU_FTR_DSCR)) {
1332                 PPC_WARN_EMULATED(mtdscr, regs);
1333                 rd = (instword >> 21) & 0x1f;
1334                 current->thread.dscr = regs->gpr[rd];
1335                 current->thread.dscr_inherit = 1;
1336                 mtspr(SPRN_DSCR, current->thread.dscr);
1337                 return 0;
1338         }
1339 #endif
1340
1341         return -EINVAL;
1342 }
1343
1344 int is_valid_bugaddr(unsigned long addr)
1345 {
1346         return is_kernel_addr(addr);
1347 }
1348
1349 #ifdef CONFIG_MATH_EMULATION
1350 static int emulate_math(struct pt_regs *regs)
1351 {
1352         int ret;
1353         extern int do_mathemu(struct pt_regs *regs);
1354
1355         ret = do_mathemu(regs);
1356         if (ret >= 0)
1357                 PPC_WARN_EMULATED(math, regs);
1358
1359         switch (ret) {
1360         case 0:
1361                 emulate_single_step(regs);
1362                 return 0;
1363         case 1: {
1364                         int code = 0;
1365                         code = __parse_fpscr(current->thread.fp_state.fpscr);
1366                         _exception(SIGFPE, regs, code, regs->nip);
1367                         return 0;
1368                 }
1369         case -EFAULT:
1370                 _exception(SIGSEGV, regs, SEGV_MAPERR, regs->nip);
1371                 return 0;
1372         }
1373
1374         return -1;
1375 }
1376 #else
1377 static inline int emulate_math(struct pt_regs *regs) { return -1; }
1378 #endif
1379
1380 void program_check_exception(struct pt_regs *regs)
1381 {
1382         enum ctx_state prev_state = exception_enter();
1383         unsigned int reason = get_reason(regs);
1384
1385         /* We can now get here via a FP Unavailable exception if the core
1386          * has no FPU, in that case the reason flags will be 0 */
1387
1388         if (reason & REASON_FP) {
1389                 /* IEEE FP exception */
1390                 parse_fpe(regs);
1391                 goto bail;
1392         }
1393         if (reason & REASON_TRAP) {
1394                 unsigned long bugaddr;
1395                 /* Debugger is first in line to stop recursive faults in
1396                  * rcu_lock, notify_die, or atomic_notifier_call_chain */
1397                 if (debugger_bpt(regs))
1398                         goto bail;
1399
1400                 if (kprobe_handler(regs))
1401                         goto bail;
1402
1403                 /* trap exception */
1404                 if (notify_die(DIE_BPT, "breakpoint", regs, 5, 5, SIGTRAP)
1405                                 == NOTIFY_STOP)
1406                         goto bail;
1407
1408                 bugaddr = regs->nip;
1409                 /*
1410                  * Fixup bugaddr for BUG_ON() in real mode
1411                  */
1412                 if (!is_kernel_addr(bugaddr) && !(regs->msr & MSR_IR))
1413                         bugaddr += PAGE_OFFSET;
1414
1415                 if (!(regs->msr & MSR_PR) &&  /* not user-mode */
1416                     report_bug(bugaddr, regs) == BUG_TRAP_TYPE_WARN) {
1417                         regs->nip += 4;
1418                         goto bail;
1419                 }
1420                 _exception(SIGTRAP, regs, TRAP_BRKPT, regs->nip);
1421                 goto bail;
1422         }
1423 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1424         if (reason & REASON_TM) {
1425                 /* This is a TM "Bad Thing Exception" program check.
1426                  * This occurs when:
1427                  * -  An rfid/hrfid/mtmsrd attempts to cause an illegal
1428                  *    transition in TM states.
1429                  * -  A trechkpt is attempted when transactional.
1430                  * -  A treclaim is attempted when non transactional.
1431                  * -  A tend is illegally attempted.
1432                  * -  writing a TM SPR when transactional.
1433                  *
1434                  * If usermode caused this, it's done something illegal and
1435                  * gets a SIGILL slap on the wrist.  We call it an illegal
1436                  * operand to distinguish from the instruction just being bad
1437                  * (e.g. executing a 'tend' on a CPU without TM!); it's an
1438                  * illegal /placement/ of a valid instruction.
1439                  */
1440                 if (user_mode(regs)) {
1441                         _exception(SIGILL, regs, ILL_ILLOPN, regs->nip);
1442                         goto bail;
1443                 } else {
1444                         printk(KERN_EMERG "Unexpected TM Bad Thing exception "
1445                                "at %lx (msr 0x%x)\n", regs->nip, reason);
1446                         die("Unrecoverable exception", regs, SIGABRT);
1447                 }
1448         }
1449 #endif
1450
1451         /*
1452          * If we took the program check in the kernel skip down to sending a
1453          * SIGILL. The subsequent cases all relate to emulating instructions
1454          * which we should only do for userspace. We also do not want to enable
1455          * interrupts for kernel faults because that might lead to further
1456          * faults, and loose the context of the original exception.
1457          */
1458         if (!user_mode(regs))
1459                 goto sigill;
1460
1461         /* We restore the interrupt state now */
1462         if (!arch_irq_disabled_regs(regs))
1463                 local_irq_enable();
1464
1465         /* (reason & REASON_ILLEGAL) would be the obvious thing here,
1466          * but there seems to be a hardware bug on the 405GP (RevD)
1467          * that means ESR is sometimes set incorrectly - either to
1468          * ESR_DST (!?) or 0.  In the process of chasing this with the
1469          * hardware people - not sure if it can happen on any illegal
1470          * instruction or only on FP instructions, whether there is a
1471          * pattern to occurrences etc. -dgibson 31/Mar/2003
1472          */
1473         if (!emulate_math(regs))
1474                 goto bail;
1475
1476         /* Try to emulate it if we should. */
1477         if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) {
1478                 switch (emulate_instruction(regs)) {
1479                 case 0:
1480                         regs->nip += 4;
1481                         emulate_single_step(regs);
1482                         goto bail;
1483                 case -EFAULT:
1484                         _exception(SIGSEGV, regs, SEGV_MAPERR, regs->nip);
1485                         goto bail;
1486                 }
1487         }
1488
1489 sigill:
1490         if (reason & REASON_PRIVILEGED)
1491                 _exception(SIGILL, regs, ILL_PRVOPC, regs->nip);
1492         else
1493                 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
1494
1495 bail:
1496         exception_exit(prev_state);
1497 }
1498 NOKPROBE_SYMBOL(program_check_exception);
1499
1500 /*
1501  * This occurs when running in hypervisor mode on POWER6 or later
1502  * and an illegal instruction is encountered.
1503  */
1504 void emulation_assist_interrupt(struct pt_regs *regs)
1505 {
1506         regs->msr |= REASON_ILLEGAL;
1507         program_check_exception(regs);
1508 }
1509 NOKPROBE_SYMBOL(emulation_assist_interrupt);
1510
1511 void alignment_exception(struct pt_regs *regs)
1512 {
1513         enum ctx_state prev_state = exception_enter();
1514         int sig, code, fixed = 0;
1515
1516         /* We restore the interrupt state now */
1517         if (!arch_irq_disabled_regs(regs))
1518                 local_irq_enable();
1519
1520         if (tm_abort_check(regs, TM_CAUSE_ALIGNMENT | TM_CAUSE_PERSISTENT))
1521                 goto bail;
1522
1523         /* we don't implement logging of alignment exceptions */
1524         if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS))
1525                 fixed = fix_alignment(regs);
1526
1527         if (fixed == 1) {
1528                 regs->nip += 4; /* skip over emulated instruction */
1529                 emulate_single_step(regs);
1530                 goto bail;
1531         }
1532
1533         /* Operand address was bad */
1534         if (fixed == -EFAULT) {
1535                 sig = SIGSEGV;
1536                 code = SEGV_ACCERR;
1537         } else {
1538                 sig = SIGBUS;
1539                 code = BUS_ADRALN;
1540         }
1541         if (user_mode(regs))
1542                 _exception(sig, regs, code, regs->dar);
1543         else
1544                 bad_page_fault(regs, regs->dar, sig);
1545
1546 bail:
1547         exception_exit(prev_state);
1548 }
1549
1550 void StackOverflow(struct pt_regs *regs)
1551 {
1552         pr_crit("Kernel stack overflow in process %s[%d], r1=%lx\n",
1553                 current->comm, task_pid_nr(current), regs->gpr[1]);
1554         debugger(regs);
1555         show_regs(regs);
1556         panic("kernel stack overflow");
1557 }
1558
1559 void nonrecoverable_exception(struct pt_regs *regs)
1560 {
1561         printk(KERN_ERR "Non-recoverable exception at PC=%lx MSR=%lx\n",
1562                regs->nip, regs->msr);
1563         debugger(regs);
1564         die("nonrecoverable exception", regs, SIGKILL);
1565 }
1566
1567 void kernel_fp_unavailable_exception(struct pt_regs *regs)
1568 {
1569         enum ctx_state prev_state = exception_enter();
1570
1571         printk(KERN_EMERG "Unrecoverable FP Unavailable Exception "
1572                           "%lx at %lx\n", regs->trap, regs->nip);
1573         die("Unrecoverable FP Unavailable Exception", regs, SIGABRT);
1574
1575         exception_exit(prev_state);
1576 }
1577
1578 void altivec_unavailable_exception(struct pt_regs *regs)
1579 {
1580         enum ctx_state prev_state = exception_enter();
1581
1582         if (user_mode(regs)) {
1583                 /* A user program has executed an altivec instruction,
1584                    but this kernel doesn't support altivec. */
1585                 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
1586                 goto bail;
1587         }
1588
1589         printk(KERN_EMERG "Unrecoverable VMX/Altivec Unavailable Exception "
1590                         "%lx at %lx\n", regs->trap, regs->nip);
1591         die("Unrecoverable VMX/Altivec Unavailable Exception", regs, SIGABRT);
1592
1593 bail:
1594         exception_exit(prev_state);
1595 }
1596
1597 void vsx_unavailable_exception(struct pt_regs *regs)
1598 {
1599         if (user_mode(regs)) {
1600                 /* A user program has executed an vsx instruction,
1601                    but this kernel doesn't support vsx. */
1602                 _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
1603                 return;
1604         }
1605
1606         printk(KERN_EMERG "Unrecoverable VSX Unavailable Exception "
1607                         "%lx at %lx\n", regs->trap, regs->nip);
1608         die("Unrecoverable VSX Unavailable Exception", regs, SIGABRT);
1609 }
1610
1611 #ifdef CONFIG_PPC64
1612 static void tm_unavailable(struct pt_regs *regs)
1613 {
1614 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1615         if (user_mode(regs)) {
1616                 current->thread.load_tm++;
1617                 regs->msr |= MSR_TM;
1618                 tm_enable();
1619                 tm_restore_sprs(&current->thread);
1620                 return;
1621         }
1622 #endif
1623         pr_emerg("Unrecoverable TM Unavailable Exception "
1624                         "%lx at %lx\n", regs->trap, regs->nip);
1625         die("Unrecoverable TM Unavailable Exception", regs, SIGABRT);
1626 }
1627
1628 void facility_unavailable_exception(struct pt_regs *regs)
1629 {
1630         static char *facility_strings[] = {
1631                 [FSCR_FP_LG] = "FPU",
1632                 [FSCR_VECVSX_LG] = "VMX/VSX",
1633                 [FSCR_DSCR_LG] = "DSCR",
1634                 [FSCR_PM_LG] = "PMU SPRs",
1635                 [FSCR_BHRB_LG] = "BHRB",
1636                 [FSCR_TM_LG] = "TM",
1637                 [FSCR_EBB_LG] = "EBB",
1638                 [FSCR_TAR_LG] = "TAR",
1639                 [FSCR_MSGP_LG] = "MSGP",
1640                 [FSCR_SCV_LG] = "SCV",
1641         };
1642         char *facility = "unknown";
1643         u64 value;
1644         u32 instword, rd;
1645         u8 status;
1646         bool hv;
1647
1648         hv = (TRAP(regs) == 0xf80);
1649         if (hv)
1650                 value = mfspr(SPRN_HFSCR);
1651         else
1652                 value = mfspr(SPRN_FSCR);
1653
1654         status = value >> 56;
1655         if ((hv || status >= 2) &&
1656             (status < ARRAY_SIZE(facility_strings)) &&
1657             facility_strings[status])
1658                 facility = facility_strings[status];
1659
1660         /* We should not have taken this interrupt in kernel */
1661         if (!user_mode(regs)) {
1662                 pr_emerg("Facility '%s' unavailable (%d) exception in kernel mode at %lx\n",
1663                          facility, status, regs->nip);
1664                 die("Unexpected facility unavailable exception", regs, SIGABRT);
1665         }
1666
1667         /* We restore the interrupt state now */
1668         if (!arch_irq_disabled_regs(regs))
1669                 local_irq_enable();
1670
1671         if (status == FSCR_DSCR_LG) {
1672                 /*
1673                  * User is accessing the DSCR register using the problem
1674                  * state only SPR number (0x03) either through a mfspr or
1675                  * a mtspr instruction. If it is a write attempt through
1676                  * a mtspr, then we set the inherit bit. This also allows
1677                  * the user to write or read the register directly in the
1678                  * future by setting via the FSCR DSCR bit. But in case it
1679                  * is a read DSCR attempt through a mfspr instruction, we
1680                  * just emulate the instruction instead. This code path will
1681                  * always emulate all the mfspr instructions till the user
1682                  * has attempted at least one mtspr instruction. This way it
1683                  * preserves the same behaviour when the user is accessing
1684                  * the DSCR through privilege level only SPR number (0x11)
1685                  * which is emulated through illegal instruction exception.
1686                  * We always leave HFSCR DSCR set.
1687                  */
1688                 if (get_user(instword, (u32 __user *)(regs->nip))) {
1689                         pr_err("Failed to fetch the user instruction\n");
1690                         return;
1691                 }
1692
1693                 /* Write into DSCR (mtspr 0x03, RS) */
1694                 if ((instword & PPC_INST_MTSPR_DSCR_USER_MASK)
1695                                 == PPC_INST_MTSPR_DSCR_USER) {
1696                         rd = (instword >> 21) & 0x1f;
1697                         current->thread.dscr = regs->gpr[rd];
1698                         current->thread.dscr_inherit = 1;
1699                         current->thread.fscr |= FSCR_DSCR;
1700                         mtspr(SPRN_FSCR, current->thread.fscr);
1701                 }
1702
1703                 /* Read from DSCR (mfspr RT, 0x03) */
1704                 if ((instword & PPC_INST_MFSPR_DSCR_USER_MASK)
1705                                 == PPC_INST_MFSPR_DSCR_USER) {
1706                         if (emulate_instruction(regs)) {
1707                                 pr_err("DSCR based mfspr emulation failed\n");
1708                                 return;
1709                         }
1710                         regs->nip += 4;
1711                         emulate_single_step(regs);
1712                 }
1713                 return;
1714         }
1715
1716         if (status == FSCR_TM_LG) {
1717                 /*
1718                  * If we're here then the hardware is TM aware because it
1719                  * generated an exception with FSRM_TM set.
1720                  *
1721                  * If cpu_has_feature(CPU_FTR_TM) is false, then either firmware
1722                  * told us not to do TM, or the kernel is not built with TM
1723                  * support.
1724                  *
1725                  * If both of those things are true, then userspace can spam the
1726                  * console by triggering the printk() below just by continually
1727                  * doing tbegin (or any TM instruction). So in that case just
1728                  * send the process a SIGILL immediately.
1729                  */
1730                 if (!cpu_has_feature(CPU_FTR_TM))
1731                         goto out;
1732
1733                 tm_unavailable(regs);
1734                 return;
1735         }
1736
1737         pr_err_ratelimited("%sFacility '%s' unavailable (%d), exception at 0x%lx, MSR=%lx\n",
1738                 hv ? "Hypervisor " : "", facility, status, regs->nip, regs->msr);
1739
1740 out:
1741         _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
1742 }
1743 #endif
1744
1745 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
1746
1747 void fp_unavailable_tm(struct pt_regs *regs)
1748 {
1749         /* Note:  This does not handle any kind of FP laziness. */
1750
1751         TM_DEBUG("FP Unavailable trap whilst transactional at 0x%lx, MSR=%lx\n",
1752                  regs->nip, regs->msr);
1753
1754         /* We can only have got here if the task started using FP after
1755          * beginning the transaction.  So, the transactional regs are just a
1756          * copy of the checkpointed ones.  But, we still need to recheckpoint
1757          * as we're enabling FP for the process; it will return, abort the
1758          * transaction, and probably retry but now with FP enabled.  So the
1759          * checkpointed FP registers need to be loaded.
1760          */
1761         tm_reclaim_current(TM_CAUSE_FAC_UNAV);
1762         /* Reclaim didn't save out any FPRs to transact_fprs. */
1763
1764         /* Enable FP for the task: */
1765         current->thread.load_fp = 1;
1766
1767         /* This loads and recheckpoints the FP registers from
1768          * thread.fpr[].  They will remain in registers after the
1769          * checkpoint so we don't need to reload them after.
1770          * If VMX is in use, the VRs now hold checkpointed values,
1771          * so we don't want to load the VRs from the thread_struct.
1772          */
1773         tm_recheckpoint(&current->thread);
1774 }
1775
1776 void altivec_unavailable_tm(struct pt_regs *regs)
1777 {
1778         /* See the comments in fp_unavailable_tm().  This function operates
1779          * the same way.
1780          */
1781
1782         TM_DEBUG("Vector Unavailable trap whilst transactional at 0x%lx,"
1783                  "MSR=%lx\n",
1784                  regs->nip, regs->msr);
1785         tm_reclaim_current(TM_CAUSE_FAC_UNAV);
1786         current->thread.load_vec = 1;
1787         tm_recheckpoint(&current->thread);
1788         current->thread.used_vr = 1;
1789 }
1790
1791 void vsx_unavailable_tm(struct pt_regs *regs)
1792 {
1793         /* See the comments in fp_unavailable_tm().  This works similarly,
1794          * though we're loading both FP and VEC registers in here.
1795          *
1796          * If FP isn't in use, load FP regs.  If VEC isn't in use, load VEC
1797          * regs.  Either way, set MSR_VSX.
1798          */
1799
1800         TM_DEBUG("VSX Unavailable trap whilst transactional at 0x%lx,"
1801                  "MSR=%lx\n",
1802                  regs->nip, regs->msr);
1803
1804         current->thread.used_vsr = 1;
1805
1806         /* This reclaims FP and/or VR regs if they're already enabled */
1807         tm_reclaim_current(TM_CAUSE_FAC_UNAV);
1808
1809         current->thread.load_vec = 1;
1810         current->thread.load_fp = 1;
1811
1812         tm_recheckpoint(&current->thread);
1813 }
1814 #endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
1815
1816 void performance_monitor_exception(struct pt_regs *regs)
1817 {
1818         __this_cpu_inc(irq_stat.pmu_irqs);
1819
1820         perf_irq(regs);
1821 }
1822
1823 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
1824 static void handle_debug(struct pt_regs *regs, unsigned long debug_status)
1825 {
1826         int changed = 0;
1827         /*
1828          * Determine the cause of the debug event, clear the
1829          * event flags and send a trap to the handler. Torez
1830          */
1831         if (debug_status & (DBSR_DAC1R | DBSR_DAC1W)) {
1832                 dbcr_dac(current) &= ~(DBCR_DAC1R | DBCR_DAC1W);
1833 #ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
1834                 current->thread.debug.dbcr2 &= ~DBCR2_DAC12MODE;
1835 #endif
1836                 do_send_trap(regs, mfspr(SPRN_DAC1), debug_status,
1837                              5);
1838                 changed |= 0x01;
1839         }  else if (debug_status & (DBSR_DAC2R | DBSR_DAC2W)) {
1840                 dbcr_dac(current) &= ~(DBCR_DAC2R | DBCR_DAC2W);
1841                 do_send_trap(regs, mfspr(SPRN_DAC2), debug_status,
1842                              6);
1843                 changed |= 0x01;
1844         }  else if (debug_status & DBSR_IAC1) {
1845                 current->thread.debug.dbcr0 &= ~DBCR0_IAC1;
1846                 dbcr_iac_range(current) &= ~DBCR_IAC12MODE;
1847                 do_send_trap(regs, mfspr(SPRN_IAC1), debug_status,
1848                              1);
1849                 changed |= 0x01;
1850         }  else if (debug_status & DBSR_IAC2) {
1851                 current->thread.debug.dbcr0 &= ~DBCR0_IAC2;
1852                 do_send_trap(regs, mfspr(SPRN_IAC2), debug_status,
1853                              2);
1854                 changed |= 0x01;
1855         }  else if (debug_status & DBSR_IAC3) {
1856                 current->thread.debug.dbcr0 &= ~DBCR0_IAC3;
1857                 dbcr_iac_range(current) &= ~DBCR_IAC34MODE;
1858                 do_send_trap(regs, mfspr(SPRN_IAC3), debug_status,
1859                              3);
1860                 changed |= 0x01;
1861         }  else if (debug_status & DBSR_IAC4) {
1862                 current->thread.debug.dbcr0 &= ~DBCR0_IAC4;
1863                 do_send_trap(regs, mfspr(SPRN_IAC4), debug_status,
1864                              4);
1865                 changed |= 0x01;
1866         }
1867         /*
1868          * At the point this routine was called, the MSR(DE) was turned off.
1869          * Check all other debug flags and see if that bit needs to be turned
1870          * back on or not.
1871          */
1872         if (DBCR_ACTIVE_EVENTS(current->thread.debug.dbcr0,
1873                                current->thread.debug.dbcr1))
1874                 regs->msr |= MSR_DE;
1875         else
1876                 /* Make sure the IDM flag is off */
1877                 current->thread.debug.dbcr0 &= ~DBCR0_IDM;
1878
1879         if (changed & 0x01)
1880                 mtspr(SPRN_DBCR0, current->thread.debug.dbcr0);
1881 }
1882
1883 void DebugException(struct pt_regs *regs, unsigned long debug_status)
1884 {
1885         current->thread.debug.dbsr = debug_status;
1886
1887         /* Hack alert: On BookE, Branch Taken stops on the branch itself, while
1888          * on server, it stops on the target of the branch. In order to simulate
1889          * the server behaviour, we thus restart right away with a single step
1890          * instead of stopping here when hitting a BT
1891          */
1892         if (debug_status & DBSR_BT) {
1893                 regs->msr &= ~MSR_DE;
1894
1895                 /* Disable BT */
1896                 mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) & ~DBCR0_BT);
1897                 /* Clear the BT event */
1898                 mtspr(SPRN_DBSR, DBSR_BT);
1899
1900                 /* Do the single step trick only when coming from userspace */
1901                 if (user_mode(regs)) {
1902                         current->thread.debug.dbcr0 &= ~DBCR0_BT;
1903                         current->thread.debug.dbcr0 |= DBCR0_IDM | DBCR0_IC;
1904                         regs->msr |= MSR_DE;
1905                         return;
1906                 }
1907
1908                 if (kprobe_post_handler(regs))
1909                         return;
1910
1911                 if (notify_die(DIE_SSTEP, "block_step", regs, 5,
1912                                5, SIGTRAP) == NOTIFY_STOP) {
1913                         return;
1914                 }
1915                 if (debugger_sstep(regs))
1916                         return;
1917         } else if (debug_status & DBSR_IC) {    /* Instruction complete */
1918                 regs->msr &= ~MSR_DE;
1919
1920                 /* Disable instruction completion */
1921                 mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) & ~DBCR0_IC);
1922                 /* Clear the instruction completion event */
1923                 mtspr(SPRN_DBSR, DBSR_IC);
1924
1925                 if (kprobe_post_handler(regs))
1926                         return;
1927
1928                 if (notify_die(DIE_SSTEP, "single_step", regs, 5,
1929                                5, SIGTRAP) == NOTIFY_STOP) {
1930                         return;
1931                 }
1932
1933                 if (debugger_sstep(regs))
1934                         return;
1935
1936                 if (user_mode(regs)) {
1937                         current->thread.debug.dbcr0 &= ~DBCR0_IC;
1938                         if (DBCR_ACTIVE_EVENTS(current->thread.debug.dbcr0,
1939                                                current->thread.debug.dbcr1))
1940                                 regs->msr |= MSR_DE;
1941                         else
1942                                 /* Make sure the IDM bit is off */
1943                                 current->thread.debug.dbcr0 &= ~DBCR0_IDM;
1944                 }
1945
1946                 _exception(SIGTRAP, regs, TRAP_TRACE, regs->nip);
1947         } else
1948                 handle_debug(regs, debug_status);
1949 }
1950 NOKPROBE_SYMBOL(DebugException);
1951 #endif /* CONFIG_PPC_ADV_DEBUG_REGS */
1952
1953 #if !defined(CONFIG_TAU_INT)
1954 void TAUException(struct pt_regs *regs)
1955 {
1956         printk("TAU trap at PC: %lx, MSR: %lx, vector=%lx    %s\n",
1957                regs->nip, regs->msr, regs->trap, print_tainted());
1958 }
1959 #endif /* CONFIG_INT_TAU */
1960
1961 #ifdef CONFIG_ALTIVEC
1962 void altivec_assist_exception(struct pt_regs *regs)
1963 {
1964         int err;
1965
1966         if (!user_mode(regs)) {
1967                 printk(KERN_EMERG "VMX/Altivec assist exception in kernel mode"
1968                        " at %lx\n", regs->nip);
1969                 die("Kernel VMX/Altivec assist exception", regs, SIGILL);
1970         }
1971
1972         flush_altivec_to_thread(current);
1973
1974         PPC_WARN_EMULATED(altivec, regs);
1975         err = emulate_altivec(regs);
1976         if (err == 0) {
1977                 regs->nip += 4;         /* skip emulated instruction */
1978                 emulate_single_step(regs);
1979                 return;
1980         }
1981
1982         if (err == -EFAULT) {
1983                 /* got an error reading the instruction */
1984                 _exception(SIGSEGV, regs, SEGV_ACCERR, regs->nip);
1985         } else {
1986                 /* didn't recognize the instruction */
1987                 /* XXX quick hack for now: set the non-Java bit in the VSCR */
1988                 printk_ratelimited(KERN_ERR "Unrecognized altivec instruction "
1989                                    "in %s at %lx\n", current->comm, regs->nip);
1990                 current->thread.vr_state.vscr.u[3] |= 0x10000;
1991         }
1992 }
1993 #endif /* CONFIG_ALTIVEC */
1994
1995 #ifdef CONFIG_FSL_BOOKE
1996 void CacheLockingException(struct pt_regs *regs, unsigned long address,
1997                            unsigned long error_code)
1998 {
1999         /* We treat cache locking instructions from the user
2000          * as priv ops, in the future we could try to do
2001          * something smarter
2002          */
2003         if (error_code & (ESR_DLK|ESR_ILK))
2004                 _exception(SIGILL, regs, ILL_PRVOPC, regs->nip);
2005         return;
2006 }
2007 #endif /* CONFIG_FSL_BOOKE */
2008
2009 #ifdef CONFIG_SPE
2010 void SPEFloatingPointException(struct pt_regs *regs)
2011 {
2012         extern int do_spe_mathemu(struct pt_regs *regs);
2013         unsigned long spefscr;
2014         int fpexc_mode;
2015         int code = FPE_FLTUNK;
2016         int err;
2017
2018         flush_spe_to_thread(current);
2019
2020         spefscr = current->thread.spefscr;
2021         fpexc_mode = current->thread.fpexc_mode;
2022
2023         if ((spefscr & SPEFSCR_FOVF) && (fpexc_mode & PR_FP_EXC_OVF)) {
2024                 code = FPE_FLTOVF;
2025         }
2026         else if ((spefscr & SPEFSCR_FUNF) && (fpexc_mode & PR_FP_EXC_UND)) {
2027                 code = FPE_FLTUND;
2028         }
2029         else if ((spefscr & SPEFSCR_FDBZ) && (fpexc_mode & PR_FP_EXC_DIV))
2030                 code = FPE_FLTDIV;
2031         else if ((spefscr & SPEFSCR_FINV) && (fpexc_mode & PR_FP_EXC_INV)) {
2032                 code = FPE_FLTINV;
2033         }
2034         else if ((spefscr & (SPEFSCR_FG | SPEFSCR_FX)) && (fpexc_mode & PR_FP_EXC_RES))
2035                 code = FPE_FLTRES;
2036
2037         err = do_spe_mathemu(regs);
2038         if (err == 0) {
2039                 regs->nip += 4;         /* skip emulated instruction */
2040                 emulate_single_step(regs);
2041                 return;
2042         }
2043
2044         if (err == -EFAULT) {
2045                 /* got an error reading the instruction */
2046                 _exception(SIGSEGV, regs, SEGV_ACCERR, regs->nip);
2047         } else if (err == -EINVAL) {
2048                 /* didn't recognize the instruction */
2049                 printk(KERN_ERR "unrecognized spe instruction "
2050                        "in %s at %lx\n", current->comm, regs->nip);
2051         } else {
2052                 _exception(SIGFPE, regs, code, regs->nip);
2053         }
2054
2055         return;
2056 }
2057
2058 void SPEFloatingPointRoundException(struct pt_regs *regs)
2059 {
2060         extern int speround_handler(struct pt_regs *regs);
2061         int err;
2062
2063         preempt_disable();
2064         if (regs->msr & MSR_SPE)
2065                 giveup_spe(current);
2066         preempt_enable();
2067
2068         regs->nip -= 4;
2069         err = speround_handler(regs);
2070         if (err == 0) {
2071                 regs->nip += 4;         /* skip emulated instruction */
2072                 emulate_single_step(regs);
2073                 return;
2074         }
2075
2076         if (err == -EFAULT) {
2077                 /* got an error reading the instruction */
2078                 _exception(SIGSEGV, regs, SEGV_ACCERR, regs->nip);
2079         } else if (err == -EINVAL) {
2080                 /* didn't recognize the instruction */
2081                 printk(KERN_ERR "unrecognized spe instruction "
2082                        "in %s at %lx\n", current->comm, regs->nip);
2083         } else {
2084                 _exception(SIGFPE, regs, FPE_FLTUNK, regs->nip);
2085                 return;
2086         }
2087 }
2088 #endif
2089
2090 /*
2091  * We enter here if we get an unrecoverable exception, that is, one
2092  * that happened at a point where the RI (recoverable interrupt) bit
2093  * in the MSR is 0.  This indicates that SRR0/1 are live, and that
2094  * we therefore lost state by taking this exception.
2095  */
2096 void unrecoverable_exception(struct pt_regs *regs)
2097 {
2098         printk(KERN_EMERG "Unrecoverable exception %lx at %lx\n",
2099                regs->trap, regs->nip);
2100         die("Unrecoverable exception", regs, SIGABRT);
2101 }
2102 NOKPROBE_SYMBOL(unrecoverable_exception);
2103
2104 #if defined(CONFIG_BOOKE_WDT) || defined(CONFIG_40x)
2105 /*
2106  * Default handler for a Watchdog exception,
2107  * spins until a reboot occurs
2108  */
2109 void __attribute__ ((weak)) WatchdogHandler(struct pt_regs *regs)
2110 {
2111         /* Generic WatchdogHandler, implement your own */
2112         mtspr(SPRN_TCR, mfspr(SPRN_TCR)&(~TCR_WIE));
2113         return;
2114 }
2115
2116 void WatchdogException(struct pt_regs *regs)
2117 {
2118         printk (KERN_EMERG "PowerPC Book-E Watchdog Exception\n");
2119         WatchdogHandler(regs);
2120 }
2121 #endif
2122
2123 /*
2124  * We enter here if we discover during exception entry that we are
2125  * running in supervisor mode with a userspace value in the stack pointer.
2126  */
2127 void kernel_bad_stack(struct pt_regs *regs)
2128 {
2129         printk(KERN_EMERG "Bad kernel stack pointer %lx at %lx\n",
2130                regs->gpr[1], regs->nip);
2131         die("Bad kernel stack pointer", regs, SIGABRT);
2132 }
2133 NOKPROBE_SYMBOL(kernel_bad_stack);
2134
2135 void __init trap_init(void)
2136 {
2137 }
2138
2139
2140 #ifdef CONFIG_PPC_EMULATED_STATS
2141
2142 #define WARN_EMULATED_SETUP(type)       .type = { .name = #type }
2143
2144 struct ppc_emulated ppc_emulated = {
2145 #ifdef CONFIG_ALTIVEC
2146         WARN_EMULATED_SETUP(altivec),
2147 #endif
2148         WARN_EMULATED_SETUP(dcba),
2149         WARN_EMULATED_SETUP(dcbz),
2150         WARN_EMULATED_SETUP(fp_pair),
2151         WARN_EMULATED_SETUP(isel),
2152         WARN_EMULATED_SETUP(mcrxr),
2153         WARN_EMULATED_SETUP(mfpvr),
2154         WARN_EMULATED_SETUP(multiple),
2155         WARN_EMULATED_SETUP(popcntb),
2156         WARN_EMULATED_SETUP(spe),
2157         WARN_EMULATED_SETUP(string),
2158         WARN_EMULATED_SETUP(sync),
2159         WARN_EMULATED_SETUP(unaligned),
2160 #ifdef CONFIG_MATH_EMULATION
2161         WARN_EMULATED_SETUP(math),
2162 #endif
2163 #ifdef CONFIG_VSX
2164         WARN_EMULATED_SETUP(vsx),
2165 #endif
2166 #ifdef CONFIG_PPC64
2167         WARN_EMULATED_SETUP(mfdscr),
2168         WARN_EMULATED_SETUP(mtdscr),
2169         WARN_EMULATED_SETUP(lq_stq),
2170         WARN_EMULATED_SETUP(lxvw4x),
2171         WARN_EMULATED_SETUP(lxvh8x),
2172         WARN_EMULATED_SETUP(lxvd2x),
2173         WARN_EMULATED_SETUP(lxvb16x),
2174 #endif
2175 };
2176
2177 u32 ppc_warn_emulated;
2178
2179 void ppc_warn_emulated_print(const char *type)
2180 {
2181         pr_warn_ratelimited("%s used emulated %s instruction\n", current->comm,
2182                             type);
2183 }
2184
2185 static int __init ppc_warn_emulated_init(void)
2186 {
2187         struct dentry *dir, *d;
2188         unsigned int i;
2189         struct ppc_emulated_entry *entries = (void *)&ppc_emulated;
2190
2191         if (!powerpc_debugfs_root)
2192                 return -ENODEV;
2193
2194         dir = debugfs_create_dir("emulated_instructions",
2195                                  powerpc_debugfs_root);
2196         if (!dir)
2197                 return -ENOMEM;
2198
2199         d = debugfs_create_u32("do_warn", 0644, dir,
2200                                &ppc_warn_emulated);
2201         if (!d)
2202                 goto fail;
2203
2204         for (i = 0; i < sizeof(ppc_emulated)/sizeof(*entries); i++) {
2205                 d = debugfs_create_u32(entries[i].name, 0644, dir,
2206                                        (u32 *)&entries[i].val.counter);
2207                 if (!d)
2208                         goto fail;
2209         }
2210
2211         return 0;
2212
2213 fail:
2214         debugfs_remove_recursive(dir);
2215         return -ENOMEM;
2216 }
2217
2218 device_initcall(ppc_warn_emulated_init);
2219
2220 #endif /* CONFIG_PPC_EMULATED_STATS */