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