WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] Re: [Xen-users] Continuing BUG:-iness booting Fedora Raw

> [    0.615589] usbcore: registered new interface driver hub
> [    0.615589] usbcore: registered new device driver usb
> [    0.615948] PCI: Using ACPI for IRQ routing
> (XEN) mm.c:4976:d0 Global bit is set to kernel page fffff81b8e
> (XEN) mm.c:4976:d0 Global bit is set to kernel page fffff81b8e
> (XEN) mm.c:4976:d0 Global bit is set to kernel page fffff81118
> (XEN) mm.c:4976:d0 Global bit is set to kernel page fffff81117
> (XEN) domain_crash_sync called from entry.S
> (XEN) Domain 0 (vcpu#0) crashed on cpu#0:
> (XEN) ----[ Xen-4.1.1  x86_64  debug=n  Not tainted ]----
> (XEN) CPU:    0
> (XEN) RIP:    e033:[<ffffffff81118d96>]
> (XEN) RFLAGS: 0000000000010282   EM: 0   CONTEXT: pv guest
> (XEN) rax: 0000000000000080   rbx: ffff880163985480   rcx: 0000000000000040
> (XEN) rdx: 0040000000000080   rsi: ffff880163985480   rdi: ffff880163985480
> (XEN) rbp: ffff880163dfaff0   rsp: ffff880163dfafd0   r8:  0000001373ffffff
> (XEN) r9:  ffffffff81b8e7fd   r10: 0000ffff00066c0a   r11: 0000000080000000
> (XEN) r12: ffffffff81a1cbd0   r13: ffffffff81b8e7fd   r14: 0000001000000000
> (XEN) r15: ffffffff81a1cbd0   cr0: 000000008005003b   cr4: 00000000000026f0
> (XEN) cr3: 0000000221a05000   cr2: 000000137400002f
> (XEN) ds: 0000   es: 0000   fs: 0000   gs: 0000   ss: e02b   cs: e033

That is fixed in the latest Linus tree. You might need this patch as well:
(also attached)

commit e3b73c4a25e9a5705b4ef28b91676caf01f9bc9f
Author: David Vrabel <david.vrabel@xxxxxxxxxx>
Date:   Tue Sep 13 10:17:32 2011 -0400

    xen/e820: if there is no dom0_mem=, don't tweak extra_pages.
    
    The patch "xen: use maximum reservation to limit amount of usable RAM"
    (d312ae878b6aed3912e1acaaf5d0b2a9d08a4f11) breaks machines that
    do not use 'dom0_mem=' argument with:
    
    reserve RAM buffer: 000000133f2e2000 - 000000133fffffff
    (XEN) mm.c:4976:d0 Global bit is set to kernel page fffff8117e
    (XEN) domain_crash_sync called from entry.S
    (XEN) Domain 0 (vcpu#0) crashed on cpu#0:
    ...
    
    The reason being that the last E820 entry is created using the
    'extra_pages' (which is based on how many pages have been freed).
    The mentioned git commit sets the initial value of 'extra_pages'
    using a hypercall which returns the number of pages (if dom0_mem
    has been used) or -1 otherwise. If the later we return with
    MAX_DOMAIN_PAGES as basis for calculation:
    
        return min(max_pages, MAX_DOMAIN_PAGES);
    
    and use it:
    
         extra_limit = xen_get_max_pages();
         if (extra_limit >= max_pfn)
                 extra_pages = extra_limit - max_pfn;
         else
                 extra_pages = 0;
    
    which means we end up with extra_pages = 128GB in PFNs (33554432)
    - 8GB in PFNs (2097152, on this specific box, can be larger or smaller),
    and then we add that value to the E820 making it:
    
      Xen: 00000000ff000000 - 0000000100000000 (reserved)
      Xen: 0000000100000000 - 000000133f2e2000 (usable)
    
    which is clearly wrong. It should look as so:
    
      Xen: 00000000ff000000 - 0000000100000000 (reserved)
      Xen: 0000000100000000 - 000000027fbda000 (usable)
    
    Naturally this problem does not present itself if dom0_mem=max:X
    is used.
    
    CC: stable@xxxxxxxxxx
    Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>

diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index ff3dfa1..09688eb 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -305,10 +305,12 @@ char * __init xen_memory_setup(void)
        sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
 
        extra_limit = xen_get_max_pages();
-       if (extra_limit >= max_pfn)
-               extra_pages = extra_limit - max_pfn;
-       else
-               extra_pages = 0;
+       if (max_pfn + extra_pages > extra_limit) {
+               if (extra_limit > max_pfn)
+                       extra_pages = extra_limit - max_pfn;
+               else
+                       extra_pages = 0;
+       }
 
        extra_pages += xen_return_unused_memory(xen_start_info->nr_pages, 
&e820);
 

Attachment: e3b73c4a25e9a5705b4ef28b91676caf01f9bc9f.patch
Description: Text Data

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>