* McClintock Matthew-B29882 | 2011-04-07 15:19:12 [+0000]: >On Thu, Apr 7, 2011 at 6:08 AM, Suzuki Poulose <suzuki at in.ibm.com> wrote: >> How is this case taken care of ? Is it via the temporary mapping ? What is >> the virtual >> ?address used by temporary mapping for the "relocate_new_kernel()" ? It is the same as the physical :) It is hard to tell where exactly the kernel image will be. It is somewhere between 0 and KEXEC_CONTROL_MEMORY_LIMIT. It is allocated in kimage_alloc_normal_control_pages(). It should not matter where it is. >When you load the new kexec image with kexec -l, I believe we make >sure we are in the first 2gb of memory. Then when you kexec, all the >TLB's are torn down and we setup a 1:1 virtual:physical mapping for >the first 2GB of memory. Then some assembly copies kernel from the >stored location to the destination and we boot the new kernel. arch/powerpc/include/asm/kexec.h: |#ifdef CONFIG_FSL_BOOKE | |/* | * On FSL-BookE we setup a 1:1 mapping which covers the first 2GiB of memory | * and therefore we can only deal with memory within this range | */ |#define KEXEC_SOURCE_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1) |#define KEXEC_DESTINATION_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1) |#define KEXEC_CONTROL_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1) | |#else So the kernel never gives memory above 2GiB to userland. > >-M Sebastian