Production kernel may reserved multiple crash kernel segments, like:
'crashkernel=4G,high crashkernel=256M,low'.
So we should pass multiple mem=<size>@<address> parameters in capture kernel.

Signed-off-by: Hongchen Zhang <zhanghongc...@loongson.cn>
Signed-off-by: Ming Wang <wangmin...@loongson.cn>
---
 kexec/arch/loongarch/kexec-loongarch.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/kexec/arch/loongarch/kexec-loongarch.c 
b/kexec/arch/loongarch/kexec-loongarch.c
index 32a42d2..f00027c 100644
--- a/kexec/arch/loongarch/kexec-loongarch.c
+++ b/kexec/arch/loongarch/kexec-loongarch.c
@@ -289,6 +289,7 @@ int loongarch_load_other_segments(struct kexec_info *info, 
unsigned long hole_mi
        unsigned long initrd_min, hole_max;
        char *initrd_buf = NULL;
        unsigned long pagesize = getpagesize();
+       int i;
 
        if (arch_options.command_line) {
                if (strlen(arch_options.command_line) >
@@ -326,9 +327,11 @@ int loongarch_load_other_segments(struct kexec_info *info, 
unsigned long hole_mi
                cmdline_add_elfcorehdr(cmdline, elfcorehdr_mem.start,
                                elfcorehdr_mem.end - elfcorehdr_mem.start + 1);
 
-               cmdline_add_mem(cmdline, crash_reserved_mem[usablemem_rgns.size 
- 1].start,
-                       crash_reserved_mem[usablemem_rgns.size - 1].end -
-                       crash_reserved_mem[usablemem_rgns.size - 1].start + 1);
+               for(i = 0;i < usablemem_rgns.size; i++) {
+                       cmdline_add_mem(cmdline, crash_reserved_mem[i].start,
+                       crash_reserved_mem[i].end -
+                       crash_reserved_mem[i].start + 1);
+               }
        }
 
        cmdline[sizeof(cmdline) - 1] = 0;

base-commit: 2a3e54e9f734ce08dee20b4ff1bdd5037f1b0193
-- 
2.39.2


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to