Message ID | 1348157018-31059-2-git-send-email-will.deacon@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, On Thu, Sep 20, 2012 at 05:03:38PM +0100, Will Deacon wrote: > From: Matthew Leach <matthew.leach@arm.com> > > Ensure that the memory regions that are set within the segments > correspond to physical contiguous memory regions. This patch seems to break kexec for me in 3.7-rc1 (commit c564df4db85aac8d1d65a56176a0a25f46138064, bisected). kexec -l fails with the following output: kexec_load failed: Invalid argument entry = 0x80008000 flags = 280000 nr_segments = 2 segment[0].buf = 0xc48008 segment[0].bufsz = 230 segment[0].mem = 0x80001000 segment[0].memsz = 1000 segment[1].buf = 0xb6a9b008 segment[1].bufsz = 3a4668 segment[1].mem = 0x80008000 segment[1].memsz = 3a5000 Could not load the kexec kernel: n800-zImage The board is OMAP2420 / Nokia N800. A.
On Tue, Oct 16, 2012 at 05:10:21PM +0100, Aaro Koskinen wrote: > Hi, Hi Aaro, > On Thu, Sep 20, 2012 at 05:03:38PM +0100, Will Deacon wrote: > > From: Matthew Leach <matthew.leach@arm.com> > > > > Ensure that the memory regions that are set within the segments > > correspond to physical contiguous memory regions. > > This patch seems to break kexec for me in 3.7-rc1 (commit > c564df4db85aac8d1d65a56176a0a25f46138064, bisected). > > kexec -l fails with the following output: > > kexec_load failed: Invalid argument > entry = 0x80008000 flags = 280000 > nr_segments = 2 > segment[0].buf = 0xc48008 > segment[0].bufsz = 230 > segment[0].mem = 0x80001000 > segment[0].memsz = 1000 > segment[1].buf = 0xb6a9b008 > segment[1].bufsz = 3a4668 > segment[1].mem = 0x80008000 > segment[1].memsz = 3a5000 > Could not load the kexec kernel: n800-zImage > > The board is OMAP2420 / Nokia N800. Interesting, it sounds like kexec thinks that you don't have contiguous memory from 0x80008000 to 0x803ad000. Can you provide some more information about your physical memory map please? Cheers, Will
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index dee34ef..e29c333 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c @@ -8,6 +8,7 @@ #include <linux/reboot.h> #include <linux/io.h> #include <linux/irq.h> +#include <linux/memblock.h> #include <asm/pgtable.h> #include <linux/of_fdt.h> #include <asm/pgalloc.h> @@ -44,6 +45,11 @@ int machine_kexec_prepare(struct kimage *image) for (i = 0; i < image->nr_segments; i++) { current_segment = &image->segment[i]; + err = memblock_is_region_memory(current_segment->mem, + current_segment->memsz); + if (err) + return - EINVAL; + err = get_user(header, (__be32*)current_segment->buf); if (err) return err;