diff options
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
| -rw-r--r-- | arch/powerpc/kernel/traps.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 2105767fcc57..4d0b4e74d579 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
| @@ -55,9 +55,6 @@ | |||
| 55 | 55 | ||
| 56 | #ifdef CONFIG_PPC64 /* XXX */ | 56 | #ifdef CONFIG_PPC64 /* XXX */ |
| 57 | #define _IO_BASE pci_io_base | 57 | #define _IO_BASE pci_io_base |
| 58 | #ifdef CONFIG_KEXEC | ||
| 59 | cpumask_t cpus_in_sr = CPU_MASK_NONE; | ||
| 60 | #endif | ||
| 61 | #endif | 58 | #endif |
| 62 | 59 | ||
| 63 | #ifdef CONFIG_DEBUGGER | 60 | #ifdef CONFIG_DEBUGGER |
| @@ -211,6 +208,19 @@ void system_reset_exception(struct pt_regs *regs) | |||
| 211 | 208 | ||
| 212 | die("System Reset", regs, SIGABRT); | 209 | die("System Reset", regs, SIGABRT); |
| 213 | 210 | ||
| 211 | /* | ||
| 212 | * Some CPUs when released from the debugger will execute this path. | ||
| 213 | * These CPUs entered the debugger via a soft-reset. If the CPU was | ||
| 214 | * hung before entering the debugger it will return to the hung | ||
| 215 | * state when exiting this function. This causes a problem in | ||
| 216 | * kdump since the hung CPU(s) will not respond to the IPI sent | ||
| 217 | * from kdump. To prevent the problem we call crash_kexec_secondary() | ||
| 218 | * here. If a kdump had not been initiated or we exit the debugger | ||
| 219 | * with the "exit and recover" command (x) crash_kexec_secondary() | ||
| 220 | * will return after 5ms and the CPU returns to its previous state. | ||
| 221 | */ | ||
| 222 | crash_kexec_secondary(regs); | ||
| 223 | |||
| 214 | /* Must die if the interrupt is not recoverable */ | 224 | /* Must die if the interrupt is not recoverable */ |
| 215 | if (!(regs->msr & MSR_RI)) | 225 | if (!(regs->msr & MSR_RI)) |
| 216 | panic("Unrecoverable System Reset"); | 226 | panic("Unrecoverable System Reset"); |
| @@ -575,14 +585,14 @@ static void parse_fpe(struct pt_regs *regs) | |||
| 575 | #define INST_MFSPR_PVR_MASK 0xfc1fffff | 585 | #define INST_MFSPR_PVR_MASK 0xfc1fffff |
| 576 | 586 | ||
| 577 | #define INST_DCBA 0x7c0005ec | 587 | #define INST_DCBA 0x7c0005ec |
| 578 | #define INST_DCBA_MASK 0x7c0007fe | 588 | #define INST_DCBA_MASK 0xfc0007fe |
| 579 | 589 | ||
| 580 | #define INST_MCRXR 0x7c000400 | 590 | #define INST_MCRXR 0x7c000400 |
| 581 | #define INST_MCRXR_MASK 0x7c0007fe | 591 | #define INST_MCRXR_MASK 0xfc0007fe |
| 582 | 592 | ||
| 583 | #define INST_STRING 0x7c00042a | 593 | #define INST_STRING 0x7c00042a |
| 584 | #define INST_STRING_MASK 0x7c0007fe | 594 | #define INST_STRING_MASK 0xfc0007fe |
| 585 | #define INST_STRING_GEN_MASK 0x7c00067e | 595 | #define INST_STRING_GEN_MASK 0xfc00067e |
| 586 | #define INST_LSWI 0x7c0004aa | 596 | #define INST_LSWI 0x7c0004aa |
| 587 | #define INST_LSWX 0x7c00042a | 597 | #define INST_LSWX 0x7c00042a |
| 588 | #define INST_STSWI 0x7c0005aa | 598 | #define INST_STSWI 0x7c0005aa |
