[PATCH v5 0/8] kexec fixes and soft restart code
Will Deacon
will.deacon at arm.com
Tue Nov 8 10:52:55 EST 2011
Hello,
This is version 5 of the patches originally posted here:
v1: http://lists.infradead.org/pipermail/linux-arm-kernel/2011-June/052157.html
v2: http://lists.infradead.org/pipermail/linux-arm-kernel/2011-June/052559.html
v3: http://lists.infradead.org/pipermail/linux-arm-kernel/2011-June/053252.html
v4: http://lists.infradead.org/pipermail/linux-arm-kernel/2011-August/062305.html
This time around, the patches are based on top of Russell's reset branch,
where soft restart on ARMv6 onwards is starting to look like a reality.
Notable changes from previous versions of this code are:
- The identity map pgd is now populated at init time and is
static to idmap.c
- The reserved stack page is no more
- The temporary restart stack is simply a static array
The reserved stack page disappeared after feedback from Nicolas suggesting
that using a known physical location for the secondary CPU pen is ripe for
bootloader abuse. Although I can think of ways around this, having to maintain
this in future kernels could become tricky so I got rid of the idea.
Furthermore, talks at the ARM workshop in Prague revealed that most SMP SoCs
have hardware for controlling SMP boot anyway, so a purely software solution
is not usually needed (the exception being boards from ARM Ltd.).
The removal of the stack page means that we need to use a static array for
the stack prior to turning off the MMU. It looks to me like we currently only
need 6 stack slots [__soft_restart (-4), setup_mm_for_reboot (-2)] so I've
allocated 32 to be safe. Is there a way GCC can help us here?
The first patch (revert) is present in Russell's fixes branch but I'm
including it here for completeness. The fourth and fifth patches may
also need to be combined as it doesn't make sense to apply one without
the other.
As per usual, all feedback is welcome.
Cheers,
Will
Will Deacon (8):
Revert "ARM: 7098/1: kdump: copy kernel relocation code at the kexec
prepare stage"
ARM: lib: add call_with_stack function for safely changing stack
ARM: idmap: populate identity map pgd at init time
ARM: reset: allow kernelspace mappings to be flat mapped during reset
ARM: reset: implement soft_restart for jumping to a physical address
ARM: soft_restart: disable the outer L2 when the last CPU is going
down
ARM: stop: execute platform callback from cpu_stop code
ARM: kexec: use soft_restart for branching to the reboot buffer
arch/arm/Kconfig | 2 +-
arch/arm/kernel/machine_kexec.c | 50 ++++++++++++++---------------------
arch/arm/kernel/process.c | 55 ++++++++++++++++++++++++++++++--------
arch/arm/kernel/smp.c | 4 +++
arch/arm/lib/Makefile | 3 +-
arch/arm/lib/call_with_stack.S | 44 +++++++++++++++++++++++++++++++
arch/arm/mm/idmap.c | 37 ++++++++++++++++++++------
7 files changed, 142 insertions(+), 53 deletions(-)
create mode 100644 arch/arm/lib/call_with_stack.S
--
1.7.4.1
More information about the linux-arm-kernel
mailing list