Re: [PATCH v4 09/12] ppc64/kexec_file: setup backup region for kdump kernel
From: Thiago Jung Bauermann <hidden>
Date: 2020-07-24 00:29:22
Also in:
kexec, lkml
Hari Bathini [off-list ref] writes:
Though kdump kernel boots from loaded address, the first 64K bytes of it is copied down to real 0. So, setup a backup region to copy the first 64K bytes of crashed kernel, in purgatory, before booting into kdump kernel. Also, update reserve map with backup region and crashed kernel's memory to avoid kdump kernel from accidentially using that memory. Reported-by: kernel test robot <redacted> [lkp: In v1, purgatory() declaration was missing] Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
Reviewed-by: Thiago Jung Bauermann <redacted> Just one minor comment below:
quoted hunk ↗ jump to hunk
@@ -1047,13 +1120,26 @@ int setup_new_fdt_ppc64(const struct kimage *image, void *fdt, goto out; } - /* Ensure we don't touch crashed kernel's memory */ - ret = fdt_add_mem_rsv(fdt, 0, crashk_res.start); + /* + * Ensure we don't touch crashed kernel's memory except the + * first 64K of RAM, which will be backed up. + */ + ret = fdt_add_mem_rsv(fdt, BACKUP_SRC_SIZE,
I know BACKUP_SRC_START is 0, but please forgive my pedantry when I say that I think it's clearer if the start address above is changed to BACKUP_SRC_START + BACKUP_SRC_SIZE...
+ crashk_res.start - BACKUP_SRC_SIZE);
if (ret) {
pr_err("Error reserving crash memory: %s\n",
fdt_strerror(ret));
goto out;
}
+
+ /* Ensure backup region is not used by kdump/capture kernel */
+ ret = fdt_add_mem_rsv(fdt, image->arch.backup_start,
+ BACKUP_SRC_SIZE);
+ if (ret) {
+ pr_err("Error reserving memory for backup: %s\n",
+ fdt_strerror(ret));
+ goto out;
+ }
}
out:-- Thiago Jung Bauermann IBM Linux Technology Center