在 2020年02月24日 14:48, Baoquan He 写道: > On 02/24/20 at 02:36pm, Lianbo Jiang wrote: >> When loading kernel and initramfs for kexec, kexec-tools could get the >> e820 reserved region from "/proc/iomem" in order to rebuild the e820 >> ranges for kexec kernel, but there may be the string "Reserved" in the >> "/proc/iomem", which caused the failure of parsing. For example: >> >> #cat /proc/iomem|grep -i reserved >> 00000000-00000fff : Reserved >> 7f338000-7f34dfff : Reserved >> 7f3cd000-8fffffff : Reserved >> f17f0000-f17f1fff : Reserved >> fe000000-ffffffff : Reserved > > This looks good to me. However, is it investigated why there are two > different names for reserved e820 regions? Can we unify them with one > name in kernel, 'Reserved' or 'reserved'? > Thanks for your comment. As we discussed in IRC, for the kexec-tools, we have to consider the compatibility because of an old "reserved" and a new "Reserved". Please refer to this commit: 640e1b38b005 ("x86/boot/e820: Basic cleanup of e820.c") In addition, I will check kernel code carefully to see if it needs to be fixed in upstream. Thanks. Lianbo > >> >> Currently, kexec-tools can not handle the above case because the memcmp() >> is case sensitive when comparing the string. >> >> So, let's fix this corner and make sure that the string "reserved" and >> "Reserved" in the "/proc/iomem" are both parsed appropriately. >> >> Signed-off-by: Lianbo Jiang <lijiang@xxxxxxxxxx> >> --- >> Note: >> Please follow up this commit below about kdump fix. >> 1ac3e4a57000 ("kdump: fix an error that can not parse the e820 reserved region") >> >> Changes since v1: >> [1] use strncasecmp() instead of introducing another 'else-if'( >> suggested by Bhupesh) >> >> kexec/arch/i386/kexec-x86-common.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/kexec/arch/i386/kexec-x86-common.c b/kexec/arch/i386/kexec-x86-common.c >> index 61ea19380ab2..9303704a0714 100644 >> --- a/kexec/arch/i386/kexec-x86-common.c >> +++ b/kexec/arch/i386/kexec-x86-common.c >> @@ -90,7 +90,7 @@ static int get_memory_ranges_proc_iomem(struct memory_range **range, int *ranges >> if (memcmp(str, "System RAM\n", 11) == 0) { >> type = RANGE_RAM; >> } >> - else if (memcmp(str, "reserved\n", 9) == 0) { >> + else if (strncasecmp(str, "reserved\n", 9) == 0) { >> type = RANGE_RESERVED; >> } >> else if (memcmp(str, "ACPI Tables\n", 12) == 0) { >> -- >> 2.17.1 >> _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec