aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/crash_dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/crash_dump.c')
-rw-r--r--arch/powerpc/kernel/crash_dump.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
index 35b9a668b0e1..26648544d5e4 100644
--- a/arch/powerpc/kernel/crash_dump.c
+++ b/arch/powerpc/kernel/crash_dump.c
@@ -34,6 +34,8 @@ void __init reserve_kdump_trampoline(void)
34 34
35static void __init create_trampoline(unsigned long addr) 35static void __init create_trampoline(unsigned long addr)
36{ 36{
37 unsigned int *p = (unsigned int *)addr;
38
37 /* The maximum range of a single instruction branch, is the current 39 /* The maximum range of a single instruction branch, is the current
38 * instruction's address + (32 MB - 4) bytes. For the trampoline we 40 * instruction's address + (32 MB - 4) bytes. For the trampoline we
39 * need to branch to current address + 32 MB. So we insert a nop at 41 * need to branch to current address + 32 MB. So we insert a nop at
@@ -42,8 +44,8 @@ static void __init create_trampoline(unsigned long addr)
42 * branch to "addr" we jump to ("addr" + 32 MB). Although it requires 44 * branch to "addr" we jump to ("addr" + 32 MB). Although it requires
43 * two instructions it doesn't require any registers. 45 * two instructions it doesn't require any registers.
44 */ 46 */
45 create_instruction(addr, 0x60000000); /* nop */ 47 patch_instruction(p, 0x60000000); /* nop */
46 create_branch(addr + 4, addr + PHYSICAL_START, 0); 48 patch_branch(++p, addr + PHYSICAL_START, 0);
47} 49}
48 50
49void __init setup_kdump_trampoline(void) 51void __init setup_kdump_trampoline(void)