[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3] x86: find a better location for the real-mode trampoline
On 17/01/2013 15:15, "Jan Beulich" <JBeulich@xxxxxxxx> 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. Xen was already using it > as a second source, and this patch keeps that working. However, just > in case, let's also fetch the information from the multiboot structure, > where the boot loader should have placed it. This way we don't > necessarily trust one of the BIOS or the multiboot loader more than > the other. > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > > Retain the previous code, thus using the multiboot value only if it's > sane but lower than the BDA computed one. Also use the full 32-bit > mem_lower value and prefer MBI_MEMLIMITS over open coding it (requiring > a slight adjustment to multiboot.h to make its constants actually > usable in assembly code, which previously they were only meant to be). > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> > --- a/xen/arch/x86/boot/head.S > +++ b/xen/arch/x86/boot/head.S > @@ -88,6 +88,20 @@ __start: > movzwl 0x413,%eax /* use base memory size on failure */ > shl $10-4,%eax > 1: > + /* > + * Compare the value in the BDA with the information from the > + * multiboot structure (if available) and use the smallest. > + */ > + testb $MBI_MEMLIMITS,(%ebx) > + jz 2f /* not available? BDA value will be fine > */ > + mov 4(%ebx),%edx > + cmp $0x100,%edx /* is the multiboot value too small? */ > + jb 2f /* if so, do not use it */ > + shl $10-4,%edx > + cmp %eax,%edx /* compare with BDA value */ > + cmovb %edx,%eax /* and use the smaller */ > + > +2: /* Reserve 64kb for the trampoline */ > sub $0x1000,%eax > > /* From arch/x86/smpboot.c: start_eip had better be page-aligned! */ > --- a/xen/include/xen/multiboot.h > +++ b/xen/include/xen/multiboot.h > @@ -18,6 +18,7 @@ > #ifndef __MULTIBOOT_H__ > #define __MULTIBOOT_H__ > > +#include "const.h" > > /* > * Multiboot header structure. > @@ -31,17 +32,17 @@ > /* The magic number passed by a Multiboot-compliant boot loader. */ > #define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002 > > -#define MBI_MEMLIMITS (1u<< 0) > -#define MBI_BOOTDEV (1u<< 1) > -#define MBI_CMDLINE (1u<< 2) > -#define MBI_MODULES (1u<< 3) > -#define MBI_AOUT_SYMS (1u<< 4) > -#define MBI_ELF_SYMS (1u<< 5) > -#define MBI_MEMMAP (1u<< 6) > -#define MBI_DRIVES (1u<< 7) > -#define MBI_BIOSCONFIG (1u<< 8) > -#define MBI_LOADERNAME (1u<< 9) > -#define MBI_APM (1u<<10) > +#define MBI_MEMLIMITS (_AC(1,u) << 0) > +#define MBI_BOOTDEV (_AC(1,u) << 1) > +#define MBI_CMDLINE (_AC(1,u) << 2) > +#define MBI_MODULES (_AC(1,u) << 3) > +#define MBI_AOUT_SYMS (_AC(1,u) << 4) > +#define MBI_ELF_SYMS (_AC(1,u) << 5) > +#define MBI_MEMMAP (_AC(1,u) << 6) > +#define MBI_DRIVES (_AC(1,u) << 7) > +#define MBI_BIOSCONFIG (_AC(1,u) << 8) > +#define MBI_LOADERNAME (_AC(1,u) << 9) > +#define MBI_APM (_AC(1,u) << 10) > > #ifndef __ASSEMBLY__ > > > > > _______________________________________________ > 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 |