[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: find a better location for the real-mode trampoline
On Fri, Nov 30, 2012 at 08:33:34AM +0000, Jan Beulich wrote: > >>> On 29.11.12 at 18:34, Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > On some machines, the location at 0x40e does not point to the beginning > > of the EBDA. Rather, it points to the beginning of the BIOS-reserved > > area of the EBDA, while the option ROMs place their data below that > > segment. > > > > For this reason, 0x413 is actually a better source than 0x40e to get > > the location of the real-mode trampoline. But it is even better to > > fetch the information from the multiboot structure, where the boot > > loader has placed the data for us already. > > I think if anything we really should make this a minimum calculation > of all three (sanity checked) values, rather than throwing the other > sources out. It's just not certain enough that we can trust all > multiboot implementations. > > Of course, ideally we'd consult the memory map, but the E820 one > is unavailable at that point (and getting at it would create a > chicken-and-egg problem). Can we scan the memory for the possible EBDA regions? There is an "EBDA" type header in those regions, if I recall? > > Jan > > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > > --- > > xen/arch/x86/boot/head.S | 21 ++++++++++++--------- > > 1 file changed, 12 insertions(+), 9 deletions(-) > > > > diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S > > index 7efa155..1790462 100644 > > --- a/xen/arch/x86/boot/head.S > > +++ b/xen/arch/x86/boot/head.S > > @@ -78,16 +78,19 @@ __start: > > cmp $0x2BADB002,%eax > > jne not_multiboot > > > > - /* Set up trampoline segment 64k below EBDA */ > > - movzwl 0x40e,%eax /* EBDA segment */ > > - cmp $0xa000,%eax /* sanity check (high) */ > > - jae 0f > > - cmp $0x4000,%eax /* sanity check (low) */ > > - jae 1f > > -0: > > - movzwl 0x413,%eax /* use base memory size on failure */ > > - shl $10-4,%eax > > + /* Set up trampoline segment just below end of base memory. > > + * Prefer to get this information from the multiboot > > + * structure, if available. > > + */ > > + mov 4(%ebx),%eax /* kb of low memory */ > > + testb $1,(%ebx) /* test MBI_MEMLIMITS */ > > + jnz 1f > > + > > + movzwl 0x413,%eax /* base memory size in kb */ > > 1: > > + shl $10-4,%eax /* convert to a segment number */ > > + > > + /* Reserve 64kb for the trampoline */ > > sub $0x1000,%eax > > > > /* From arch/x86/smpboot.c: start_eip had better be page-aligned! > > */ > > -- > > 1.8.0 > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@xxxxxxxxxxxxx > > http://lists.xen.org/xen-devel > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |