diff options
Diffstat (limited to 'arch/powerpc/kernel/crash_dump.c')
-rw-r--r-- | arch/powerpc/kernel/crash_dump.c | 6 |
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 | ||
35 | static void __init create_trampoline(unsigned long addr) | 35 | static 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 | ||
49 | void __init setup_kdump_trampoline(void) | 51 | void __init setup_kdump_trampoline(void) |