[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Xen not working with stock Debian Wheezy 3.2 kernel on a Core 2 Duo box
On Mon, Jul 08, 2013 at 01:06:18PM +0100, David Vrabel wrote: > On 08/07/13 12:29, Jan Beulich wrote: > >>>> On 08.07.13 at 12:31, Wei Liu <wei.liu2@xxxxxxxxxx> wrote: > > > > $subject is probably the wrong way round, since ... > > > >> (XEN) 0000000000000000 - 000000000008f000 (usable) > >> (XEN) 000000000008f000 - 00000000000a0000 (reserved) > >> (XEN) 00000000000e0000 - 0000000000100000 (reserved) > >> (XEN) 0000000000100000 - 00000000ce69a000 (usable) > >> (XEN) 00000000ce69a000 - 00000000ce6f1000 (ACPI NVS) > >> (XEN) 00000000ce6f1000 - 00000000cf5fb000 (usable) > >> (XEN) 00000000cf5fb000 - 00000000cf608000 (reserved) > >> (XEN) 00000000cf608000 - 00000000cf6a5000 (usable) > >> (XEN) 00000000cf6a5000 - 00000000cf6aa000 (ACPI data) > >> (XEN) 00000000cf6aa000 - 00000000cf6ab000 (usable) > >> (XEN) 00000000cf6ab000 - 00000000cf6f2000 (ACPI NVS) > >> (XEN) 00000000cf6f2000 - 00000000cf6ff000 (ACPI data) > >> (XEN) 00000000cf6ff000 - 00000000cf700000 (usable) > >> (XEN) 00000000cf700000 - 00000000d0000000 (reserved) > >> (XEN) 00000000fff00000 - 0000000100000000 (reserved) > >> (XEN) 0000000100000000 - 0000000228000000 (usable) > >> (XEN) 0000000228000000 - 000000022c000000 (unusable) > > > > .. this and ... > > > >> [ 0.000000] Xen: 0000000000000000 - 000000000008f000 (usable) > >> [ 0.000000] Xen: 000000000008f000 - 0000000000100000 (reserved) > >> [ 0.000000] Xen: 0000000000100000 - 00000000ce69a000 (usable) > >> [ 0.000000] Xen: 00000000ce69a000 - 00000000ce6f1000 (ACPI NVS) > >> [ 0.000000] Xen: 00000000ce6f1000 - 00000000cf5fb000 (usable) > >> [ 0.000000] Xen: 00000000cf5fb000 - 00000000cf608000 (reserved) > >> [ 0.000000] Xen: 00000000cf608000 - 00000000cf6a5000 (usable) > >> [ 0.000000] Xen: 00000000cf6a5000 - 00000000cf6aa000 (ACPI data) > >> [ 0.000000] Xen: 00000000cf6aa000 - 00000000cf6ab000 (usable) > >> [ 0.000000] Xen: 00000000cf6ab000 - 00000000cf6f2000 (ACPI NVS) > >> [ 0.000000] Xen: 00000000cf6f2000 - 00000000cf6ff000 (ACPI data) > >> [ 0.000000] Xen: 00000000cf6ff000 - 00000000cf700000 (usable) > >> [ 0.000000] Xen: 00000000cf700000 - 00000000d0000000 (reserved) > >> [ 0.000000] Xen: 00000000fee00000 - 00000000fee01000 (reserved) > >> [ 0.000000] Xen: 00000000fff00000 - 0000000100000000 (reserved) > >> [ 0.000000] Xen: 0000000100000000 - 0000000228000000 (usable) > >> [ 0.000000] Xen: 0000000228000000 - 000000022c000000 (unusable) > > > > ... this show that the kernel should be well aware that it shouldn't > > map (or use in any other way) this region. > > This came up before when tboot (?) was incorrectly marking a region as > UNUSABLE instead of RESERVED. > > Does the following (untested) patch help? > Oh wait, this patch is for Linux kernel. It might take me some time to get it apply to Debian Wheezy's kernel (I've never done this before). But one thing I need to point out is that 3.10 doens't have any problem booting on Xen unstable. 3.10 doesn't seem to have similar logic in xen_memory_setup... > 8<--------------------------------------- > x86/xen: do not identity map UNUSABLE regions in the machine E820 > > If there are UNUSABLE regions in the machine memory map, dom0 will > attempt to map them 1:1 which is not permitted by Xen and the kernel > will crash. > > There isn't anything interesting in the UNUSABLE region that the dom0 > kernel needs access to so we can avoid making the 1:1 mapping and > treat it as RAM. > > Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx> > --- > arch/x86/xen/setup.c | 24 ++++++++++++++++++++++++ > 1 files changed, 24 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c > index 94eac5c..73f621c 100644 > --- a/arch/x86/xen/setup.c > +++ b/arch/x86/xen/setup.c > @@ -313,6 +313,17 @@ static void xen_align_and_add_e820_region(u64 > start, u64 size, int type) > e820_add_region(start, end - start, type); > } > > +void xen_ignore_unusable(struct e820entry *list, size_t map_size) > +{ > + struct e820entry *entry; > + unsigned int i; > + > + for (i = 0, entry = list; i < map_size; i++, entry++) { > + if (entry->type == E820_UNUSABLE) > + entry->type = E820_RAM; > + } > +} > + > /** > * machine_specific_memory_setup - Hook for machine specific memory setup. > **/ > @@ -353,6 +364,19 @@ char * __init xen_memory_setup(void) > } > BUG_ON(rc); > > + /* > + * Xen won't allow a 1:1 mapping to be created to UNUSABLE > + * regions, so if we're using the machine memory map convert > + * UNUSABLE to RAM. > + * > + * This might look odd but what we're really doing here is > + * taking the psuedo-physical memory map and punching 1:1 > + * holes through to interesting bits found in the machine > + * memory map. > + */ > + if (xen_initial_domain()) > + xen_ignore_unusable(map, memmap.nr_entries); > + > /* Make sure the Xen-supplied memory map is well-ordered. */ > sanitize_e820_map(map, memmap.nr_entries, &memmap.nr_entries); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |