summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--purgatory/arch/ia64/purgatory-ia64.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/purgatory/arch/ia64/purgatory-ia64.c b/purgatory/arch/ia64/purgatory-ia64.c
index 275f9f5..b2fe6d4 100644
--- a/purgatory/arch/ia64/purgatory-ia64.c
+++ b/purgatory/arch/ia64/purgatory-ia64.c
@@ -190,6 +190,22 @@ patch_efi_memmap(struct kexec_boot_params *params,
mend = src_md->phys_addr +
(src_md->num_pages << EFI_PAGE_SHIFT);
}
+ if (seg->end < mend && src < src_end) {
+ void *src_next;
+ efi_memory_desc_t *src_next_md;
+ src_next = src + boot_param->efi_memdesc_size;
+ src_next_md = src_next;
+ if (src_next_md->type ==
+ EFI_CONVENTIONAL_MEMORY) {
+ /* TODO check contig and attribute */
+ src += boot_param->efi_memdesc_size;
+ src_md = src;
+ mend = src_md->phys_addr +
+ (src_md->num_pages <<
+ EFI_PAGE_SHIFT);
+ }
+
+ }
start_pages = (seg->start - mstart) >> EFI_PAGE_SHIFT;
mid_pages = (seg->end - seg->start) >> EFI_PAGE_SHIFT;
end_pages = (mend - seg->end) >> EFI_PAGE_SHIFT;