image->head, image->entry_maddr, reloc_flags);
}
+extern unsigned long lu_bootmem_start, lu_bootmem_size;
+
int machine_kexec_get(xen_kexec_range_t *range)
{
- if (range->range != KEXEC_RANGE_MA_XEN)
- return -EINVAL;
- return machine_kexec_get_xen(range);
+ switch (range->range) {
+ case KEXEC_RANGE_MA_XEN:
+ return machine_kexec_get_xen(range);
+ case KEXEC_RANGE_MA_LIVEUPDATE:
+ range->start = lu_bootmem_start;
+ range->size = lu_bootmem_size;
+ return 0;
+ default:
+ return -EINVAL;
+ }
}
void arch_crash_save_vmcoreinfo(void)
}
-static unsigned long lu_bootmem_start, lu_bootmem_size, lu_data;
+unsigned long lu_bootmem_start, lu_bootmem_size, lu_data;
static int __init parse_liveupdate(const char *str)
{
#define KEXEC_RANGE_MA_EFI_MEMMAP 5 /* machine address and size of
* of the EFI Memory Map */
#define KEXEC_RANGE_MA_VMCOREINFO 6 /* machine address and size of vmcoreinfo */
+#define KEXEC_RANGE_MA_LIVEUPDATE 7 /* Boot mem for live update */
/*
* Find the address and size of certain memory areas