[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] dom0 pvops boot crash on very ordinary Dell R310
On 10/27/2010 09:04 AM, Ian Campbell wrote: > On Wed, 2010-10-27 at 14:18 +0100, Ian Campbell wrote: >> >> IOW we are faulting on precisely one of the PFNs which we earlier >> released. We released these because of a hole in the e820 between >> 0xa0000-0x100000 which dom0 apparently manufactured. >> >> IIRC in a PV domU we reserve some of the legacy address space to stop >> old ISA drivers etc from getting at it. I suspect this is wrong for a >> dom0 where we want the e820 to be more or less unmolested. I'll track >> down the code in question and see if removing it for dom0 helps. > More than the issue with unnecessarily reserving memory we simply can't > trust the e820 to cover all the firmware tables here. I think it is > better to simply not give any memory under 1M back to Xen in the domain > 0 case. > > 8<----------- > > >From e25932748e354f5da3fbb5719fb17f9ca2e35f09 Mon Sep 17 00:00:00 2001 > From: Ian Campbell <ian.campbell@xxxxxxxxxx> > Date: Wed, 27 Oct 2010 17:02:25 +0100 > Subject: [PATCH] xen: do not release any memory under 1M in domain 0 > > We already deliberately setup a 1-1 P2M for the region up to 1M in > order to allow code which assumes this region is already mapped to > work without having to convert everything to ioremap. > Looks good, but: > Domain 0 should not return any apparently unused memory regions > (reserved or otherwise) in this region to Xen since the e820 may not > accurately reflect what the BIOS has stashed in this region. > > Similarly do not reserve the ISA range if we are domain 0 since it is > not necessarily normal, usable memory in that case. > > Since we now assume that we have a (reasonably) sensible e820 map in > domain 0 make a failure to obtain a machine memory map from the > hypervisor fatal rather than struggling on with a made up map and > suffering all the potential fallout. > > Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> > --- > arch/x86/xen/setup.c | 32 +++++++++++++++++++++++++------- > 1 files changed, 25 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c > index 915b0c3..baad88c 100644 > --- a/arch/x86/xen/setup.c > +++ b/arch/x86/xen/setup.c > @@ -84,6 +84,22 @@ static unsigned long __init > xen_release_chunk(phys_addr_t start_addr, > start = PFN_UP(start_addr); > end = PFN_DOWN(end_addr); > > + /* > + * Domain 0 maintains a 1-1 P2M mapping for the first megabyte > + * so do not return such memory to the hypervisor. > + * > + * This region can contain various firmware tables and the > + * like which are often assumed to be always mapped and > + * available via phys_to_virt. > + */ > + if (xen_initial_domain()) { > + if (end < PFN_DOWN(0x100000UL)) > + return 0; > + > + if (start < PFN_DOWN(0x100000UL)) > + start = PFN_DOWN(0x100000UL); Use ISA_END_ADDRESS I think. > + } > + > if (end <= start) > return 0; > > @@ -163,6 +179,7 @@ char * __init xen_memory_setup(void) > XENMEM_memory_map; > rc = HYPERVISOR_memory_op(op, &memmap); > if (rc == -ENOSYS) { > + BUG_ON(xen_initial_domain()); > memmap.nr_entries = 1; > map[0].addr = 0ULL; > map[0].size = mem_end; > @@ -200,15 +217,16 @@ char * __init xen_memory_setup(void) > } > > /* > - * Even though this is normal, usable memory under Xen, reserve > - * ISA memory anyway because too many things think they can poke > - * about in there. > + * Even though this is normal, usable memory in a Xen domU, > + * reserve ISA memory anyway because too many things think > + * they can poke about in there. > * > - * In a dom0 kernel, this region is identity mapped with the > - * hardware ISA area, so it really is out of bounds. > + * In dom0 we use the host e820 and therefore do not need to > + * specially reserved anything. > */ > - e820_add_region(ISA_START_ADDRESS, ISA_END_ADDRESS - > ISA_START_ADDRESS, > - E820_RESERVED); > + if (!xen_initial_domain()) > + e820_add_region(ISA_START_ADDRESS, ISA_END_ADDRESS - > ISA_START_ADDRESS, > + E820_RESERVED); What's the problem with making it unconditionally reserved even if the host E820 doesn't? J _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |