On 04/10/2014 07:47 PM, Dave Young wrote: > On 04/10/14 at 07:36pm, H. Peter Anvin wrote: >> On 04/10/2014 07:28 PM, Dave Young wrote: >>>> >>>> +static void add_e820_map_from_mr(struct x86_linux_param_header *real_mode, >>>> + struct e820entry *e820, struct memory_range *range, int nr_range) >>>> +{ >>>> + int i; >>>> + >>>> + for (i = 0; i < nr_range; i++) { >>>> + e820[i].addr = range[i].start; >>>> + e820[i].size = range[i].end - range[i].start; >>> >>> I see it's same as original code but I still feel it should be end - start + 1; >>> >> >> I can't see how it could possibly be +1. >> >> How do you encode range[].end? If it is inclusive it should be end - >> start - 1, if it is a semiclosed range (the normal thing in computer >> contexts) then the code above is correct. I obviously got the above backwards in my head. Please ignore. > > Say the first range from my /proc/iomem: > 00000000-00000fff : reserved > > Shouldn't the size be 0x1000? It looks like closed range instead of semiclosed range. You're right. I thought we mangled the contents for /proc/iomem, but we actually keep the contents as a closed range. So never mind me! -ENOBRAINTODAY. -hpa