Stefan, so your gut feeling about the 228000 was right.

he E820_UNUSABLE regions are memory that "can" be used (and if you look
in 'xen_memory_setup' that is how we set aside the memory for the
balloon region - look for the 'type = E820_UNUSABLE). So by that logic,
E820_UNUSABLE region should get the same treatment as the rest of the
E820_RAM memory.

So this "hack"
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index 8971a26..e8172bf 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -396,6 +396,7 @@ char * __init xen_memory_setup(void)
                          extra_pages);
        i = 0;
        while (i < memmap.nr_entries) {
+               bool fix_unusable = true;
                u64 addr = map[i].addr;
                u64 size = map[i].size;
                u32 type = map[i].type;
@@ -407,9 +408,16 @@ char * __init xen_memory_setup(void)
                                size = min(size, (u64)extra_pages * PAGE_SIZE);
                                extra_pages -= size / PAGE_SIZE;
                                xen_add_extra_mem(addr, size);
-                       } else
+                       } else {
                                type = E820_UNUSABLE;
+                               fix_unusable = false;
+                       }
                }
+               /*
+                * Not sure about this.
+                */
+               if (type == E820_UNUSABLE && fix_unusable)
+                       type = E820_RESERVED;
 
                xen_align_and_add_e820_region(addr, size, type);
 

Would potentially fix it. But I am not sure what are the other cases where:
 a) It is OK to ignore E820_UNUSABLE altogether as provided by the hypervisor. 
Are there legitimate reasons for the BIOS to mark those as E820_UNUSABLE? 
Perhaps memory hotplug? (Jinsong from Intel could help answer that).
 b) Other? Perhaps the fix is in the hypervisor by clipping said memory 
completely out of the E820? In other words as if it had run with the 'mem=X' 
and it is oblivious to the non-MTRR region. But what if the MTRR region lies 
right in smack of other regions (like https://lkml.org/lkml/2012/8/24/474). The 
choice there would be to remove the E820 completly (but then we would think it 
is a PCI region, which might be OK or not - but this reminds me of 
http://lists.xen.org/archives/html/xen-devel/2011-02/msg01238.html where "gaps" 
are considered as I/O regions and could end up with the intel-agp trying to use 
it as its "flush" region).
c) Just leave it is as and document users to use 'dom0_mem=max' ? Perhaps we 
should codify it then? So if we detect the MTRR invalid regions we 
automatically set the dom0 maxpages as if 'dom0_mem=max:<up to MTRR>' was done? 
In reality that is what the hypervisor is doing - it will ignore those regions 
altogether - it is our misfortunate that we treat the region as if it was RAM 
(which actually is the right *thing*).

Thoughts?

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1111470

Title:
  Precise kernel not bootable under Xen - alloc_l1_table

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1111470/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to