diff options
author | Magnus Damm <magnus@valinux.co.jp> | 2007-02-15 22:42:35 +0900 |
---|---|---|
committer | Simon Horman <horms@verge.net.au> | 2007-03-07 14:54:10 +0900 |
commit | bcd72df212636eee645276a2409b0eef8c250dee (patch) | |
tree | f1ebe4805d30348295247ba7ba5e3afc3dac9f43 /purgatory | |
parent | 56595256907a3b31d2849dfe185d0d16b2ead471 (diff) |
kexec-tools: Use EFI_LOADER_DATA for ELF core header (ia64)
The address where the ELF core header is stored is passed to the secondary
kernel as a kernel command line option. The memory area for this header is
also marked as a separate EFI memory descriptor on ia64.
The separate EFI memory descriptor is at the moment of the type
EFI_UNUSABLE_MEMORY. With such a type the secondary kernel skips over the
entire memory granule (config option, 16M or 64M) when detecting memory.
If we are lucky we will just lose some memory, but if we happen to have data
in the same granule (such as an initramfs image), then this data will never
get mapped and the kernel bombs out when trying to access it.
So this is an attempt to fix this by changing the EFI memory descriptor
type into EFI_LOADER_DATA. This type is the same type used for the kernel
data and for initramfs. In the secondary kernel we then handle the ELF core
header data the same way as we handle the initramfs image.
This strategy requires changes in the secondary kernel as well, I'll
post the kernel patches in a little while.
Signed-off-by: Magnus Damm <magnus@valinux.co.jp>
Signed-off-by: Simon Horman <horms@verge.net.au>
Diffstat (limited to 'purgatory')
-rw-r--r-- | purgatory/arch/ia64/purgatory-ia64.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/purgatory/arch/ia64/purgatory-ia64.c b/purgatory/arch/ia64/purgatory-ia64.c index de71b98..275f9f5 100644 --- a/purgatory/arch/ia64/purgatory-ia64.c +++ b/purgatory/arch/ia64/purgatory-ia64.c @@ -123,7 +123,6 @@ typedef struct { struct loaded_segment { unsigned long start; unsigned long end; - unsigned long reserved; }; struct kexec_boot_params { @@ -202,8 +201,7 @@ patch_efi_memmap(struct kexec_boot_params *params, } dst_md->phys_addr = seg->start; dst_md->num_pages = mid_pages; - dst_md->type = seg->reserved ? - EFI_UNUSABLE_MEMORY:EFI_LOADER_DATA; + dst_md->type = EFI_LOADER_DATA; if (!end_pages) break; dest += boot_param->efi_memdesc_size; |