[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


  • To: Jan Beulich <JBeulich@xxxxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxx>
  • From: Keir Fraser <keir@xxxxxxx>
  • Date: Thu, 17 Jan 2013 15:53:01 +0000
  • Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx>
  • Delivery-date: Thu, 17 Jan 2013 15:53:21 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>
  • Thread-index: Ac30yrpQFL4sDoPq/EqOfhF2D3Va8Q==
  • Thread-topic: [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


 


Rackspace

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