From: "Pratyush Yadav (Google)" There are currently 3 callers of kho_get_mem_map_phys(). Two of them, kho_mem_retrieve() and kho_extend_scratch() need the virtual address. The third, kho_populate() doesn't care. Make things simpler by directly returning the virtual address. Rename kho_get_mem_map_phys() to kho_get_mem_map() to accurately reflect what it returns. Signed-off-by: Pratyush Yadav (Google) --- kernel/liveupdate/kexec_handover.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/kernel/liveupdate/kexec_handover.c b/kernel/liveupdate/kexec_handover.c index c2b843a5fb28..2e13b80d1c7d 100644 --- a/kernel/liveupdate/kexec_handover.c +++ b/kernel/liveupdate/kexec_handover.c @@ -625,10 +625,11 @@ static int __init kho_preserved_memory_reserve(unsigned long key, void *data) return 0; } -/* Returns physical address of the preserved memory map from FDT */ -static phys_addr_t __init kho_get_mem_map_phys(const void *fdt) +/* Returns virtual address of the preserved memory map from FDT */ +static __init void *kho_get_mem_map(const void *fdt) { const void *mem_ptr; + phys_addr_t mem_map_phys; int len; mem_ptr = fdt_getprop(fdt, 0, KHO_FDT_MEMORY_MAP_PROP_NAME, &len); @@ -637,7 +638,11 @@ static phys_addr_t __init kho_get_mem_map_phys(const void *fdt) return 0; } - return get_unaligned((const u64 *)mem_ptr); + mem_map_phys = get_unaligned((const u64 *)mem_ptr); + if (!mem_map_phys) + return NULL; + + return phys_to_virt(mem_map_phys); } /* @@ -932,15 +937,15 @@ void __init kho_extend_scratch(void) .key = kho_ext_mark_scratch, }; struct kho_radix_tree radix; - phys_addr_t prev_end = 0, mem_map_phys; + phys_addr_t prev_end = 0; int err = 0; if (!is_kho_boot()) return; /* Make sure the KHO radix tree is initialized. */ - mem_map_phys = kho_get_mem_map_phys(kho_get_fdt()); - err = kho_radix_init_tree(&kho_in.radix_tree, phys_to_virt(mem_map_phys)); + err = kho_radix_init_tree(&kho_in.radix_tree, + kho_get_mem_map(kho_get_fdt())); if (err) goto print; @@ -1587,11 +1592,9 @@ static int __init kho_mem_retrieve(const void *fdt) const struct kho_radix_walk_cb cb = { .key = kho_preserved_memory_reserve, }; - phys_addr_t mem_map_phys; int err; - mem_map_phys = kho_get_mem_map_phys(fdt); - err = kho_radix_init_tree(&kho_in.radix_tree, phys_to_virt(mem_map_phys)); + err = kho_radix_init_tree(&kho_in.radix_tree, kho_get_mem_map(fdt)); if (err) return err; @@ -1816,8 +1819,7 @@ void __init kho_populate(phys_addr_t fdt_phys, u64 fdt_len, { unsigned int scratch_cnt = scratch_len / sizeof(*kho_scratch); struct kho_scratch *scratch = NULL; - phys_addr_t mem_map_phys; - void *fdt = NULL; + void *fdt = NULL, *mem_map; bool populated = false; int err; @@ -1840,8 +1842,8 @@ void __init kho_populate(phys_addr_t fdt_phys, u64 fdt_len, goto unmap_fdt; } - mem_map_phys = kho_get_mem_map_phys(fdt); - if (!mem_map_phys) + mem_map = kho_get_mem_map(fdt); + if (!mem_map) goto unmap_fdt; scratch = early_memremap(scratch_phys, scratch_len); -- 2.54.0.545.g6539524ca2-goog