[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 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).

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.