[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kexec
Subject:    Re: [PATCH v2] kexec: support parsing the string "Reserved" to get the correct e820 reserved region
From:       lijiang <lijiang () redhat ! com>
Date:       2020-02-24 13:14:52
Message-ID: c88eacdf-4116-edc7-d2c3-945c269708be () redhat ! com
[Download RAW message or body]

在 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@redhat.com>
>> ---
>> 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@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic