On 04/11/14 at 11:00am, WANG Chao wrote:
> On 04/11/14 at 10:47am, 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.
> > 
> > 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. range[].end is inclusive and size should be (end - start + 1)

In kexec path, memory range .end is exclusive however. I think it should
also be updated to inclusive to unify the encoding of memory range for
both kexec and kdump.

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to