summaryrefslogtreecommitdiffstats
path: root/purgatory
diff options
context:
space:
mode:
authorMagnus Damm <magnus@valinux.co.jp>2007-02-15 22:42:35 +0900
committerSimon Horman <horms@verge.net.au>2007-03-07 14:54:10 +0900
commitbcd72df212636eee645276a2409b0eef8c250dee (patch)
treef1ebe4805d30348295247ba7ba5e3afc3dac9f43 /purgatory
parent56595256907a3b31d2849dfe185d0d16b2ead471 (diff)
downloadkexec-tools-bcd72df212636eee645276a2409b0eef8c250dee.tar.gz
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.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/purgatory/arch/ia64/purgatory-ia64.c b/purgatory/arch/ia64/purgatory-ia64.c
index de71b98d..275f9f59 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;