[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Crash on boot with 2.6.37-rc8-git3



On Tue, 25 Jan 2011, Konrad Rzeszutek Wilk wrote:
> On Tue, Jan 25, 2011 at 03:19:22PM +0000, Stefano Stabellini wrote:
> > On Tue, 25 Jan 2011, Ian Campbell wrote:
> > > > unless I am very confused
> > > > 
> > > > map[i].size -= (map[i].size + map[i].addr) % PAGE_SIZE
> > > > 
> > > > is not the same as:
> > > > 
> > > > as map[i].size &= ~(PAGE_SIZE-1): 
> > > > 
> > > > because it also takes into account the possibility that map[i].addr is
> > > > not page aligned.
> > > 
> > > Oh yes, I didn't notice that aspect of it.
> > > 
> > > >  It doesn't move map[i].addr upward but still makes sure that
> > > > the region ends at a page boundary anyway.
> > > 
> > > Which returns to my second question ;-) Why do we not need to align addr
> > > too?
> > 
> > My machine can boot fine with a map[i].addr not page aligned.
> 
> OK, so then the patch that M A Young came up with ought to do it?
> 

I think you need the slightly improved version I posted before that can
handle map[i].addr not page aligned (I silently added a s-o-b Young, I
hope he's OK with this).

---


commit b84683ad1e704c2a296d08ff0cbe29db936f94a7
Author: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date:   Tue Jan 25 12:03:42 2011 +0000

    xen: make sure the e820 memory regions end at page boundary
    
    Signed-off-by: M A Young <m.a.young@xxxxxxxxxxxx>
    Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>

diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index b5a7f92..a3d28a1 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -179,7 +179,10 @@ char * __init xen_memory_setup(void)
        e820.nr_map = 0;
        xen_extra_mem_start = mem_end;
        for (i = 0; i < memmap.nr_entries; i++) {
-               unsigned long long end = map[i].addr + map[i].size;
+               unsigned long long end;
+               if (map[i].type == E820_RAM)
+                       map[i].size -= (map[i].size + map[i].addr) % PAGE_SIZE;
+               end = map[i].addr + map[i].size;
 
                if (map[i].type == E820_RAM && end > mem_end) {
                        /* RAM off the end - may be partially included */

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.