aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/misc_64.S
diff options
context:
space:
mode:
authorMilton Miller <miltonm@bga.com>2008-10-22 06:39:18 -0400
committerPaul Mackerras <paulus@samba.org>2008-10-31 01:11:44 -0400
commit1767c8f392857694899403a65942cc70b5b7d132 (patch)
tree609181f519dbf8569808b564a2b15358b79596f5 /arch/powerpc/kernel/misc_64.S
parent8694a1c6056f1f5f006a0442428f2df5171b9656 (diff)
powerpc: Kexec exit should not use magic numbers
Commit 54622f10a6aabb8bb2bdacf3dd070046f03dc246 ("powerpc: Support for relocatable kdump kernel") added a magic flag value in a register to tell purgatory that it should be a panic kernel. This part is wrong and is reverted by this commit. The kernel gets a list of memory blocks and a entry point from user space. Its job is to copy the blocks into place and then branch to the designated entry point (after turning "off" the mmu). The user space tool inserts a trampoline, called purgatory, that runs before the user supplied code. Its job is to establish the entry environment for the new kernel or other application based on the contents of memory. The purgatory code is compiled and embedded in the tool, where it is later patched using the elf symbol table using elf symbols. Since the tool knows it is creating a purgatory that will run after a kernel crash, it should just patch purgatory (or the kernel directly) if something needs to happen. Signed-off-by: Milton Miller <miltonm@bga.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/misc_64.S')
-rw-r--r--arch/powerpc/kernel/misc_64.S9
1 files changed, 3 insertions, 6 deletions
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
index a243fd072a77..3053fe5c62f2 100644
--- a/arch/powerpc/kernel/misc_64.S
+++ b/arch/powerpc/kernel/misc_64.S
@@ -611,12 +611,10 @@ real_mode: /* assume normal blr return */
611 611
612 612
613/* 613/*
614 * kexec_sequence(newstack, start, image, control, clear_all(), kdump_flag) 614 * kexec_sequence(newstack, start, image, control, clear_all())
615 * 615 *
616 * does the grungy work with stack switching and real mode switches 616 * does the grungy work with stack switching and real mode switches
617 * also does simple calls to other code 617 * also does simple calls to other code
618 *
619 * kdump_flag says whether the next kernel should be a kdump kernel.
620 */ 618 */
621 619
622_GLOBAL(kexec_sequence) 620_GLOBAL(kexec_sequence)
@@ -649,7 +647,7 @@ _GLOBAL(kexec_sequence)
649 mr r29,r5 /* image (virt) */ 647 mr r29,r5 /* image (virt) */
650 mr r28,r6 /* control, unused */ 648 mr r28,r6 /* control, unused */
651 mr r27,r7 /* clear_all() fn desc */ 649 mr r27,r7 /* clear_all() fn desc */
652 mr r26,r8 /* kdump flag */ 650 mr r26,r8 /* spare */
653 lhz r25,PACAHWCPUID(r13) /* get our phys cpu from paca */ 651 lhz r25,PACAHWCPUID(r13) /* get our phys cpu from paca */
654 652
655 /* disable interrupts, we are overwriting kernel data next */ 653 /* disable interrupts, we are overwriting kernel data next */
@@ -711,6 +709,5 @@ _GLOBAL(kexec_sequence)
711 mr r4,r30 # start, aka phys mem offset 709 mr r4,r30 # start, aka phys mem offset
712 mtlr 4 710 mtlr 4
713 li r5,0 711 li r5,0
714 mr r6,r26 /* kdump_flag */ 712 blr /* image->start(physid, image->start, 0); */
715 blr /* image->start(physid, image->start, 0, kdump_flag); */
716#endif /* CONFIG_KEXEC */ 713#endif /* CONFIG_KEXEC */