On 09/06/15 14:53, Jan Beulich wrote:
> From: Konrad Rzeszutek Wilk <konrad.w...@oracle.com>
>
> To help on certain platforms to run.
>
> Signed-off-by: Konrad Rzeszutek Wilk <konrad.w...@oracle.com>
> Signed-off-by: Jan Beulich <jbeul...@suse.com>
>
> --- a/xen/arch/x86/efi/efi-boot.h
> +++ b/xen/arch/x86/efi/efi-boot.h
> @@ -148,12 +148,16 @@ static void __init efi_arch_process_memo
>  
>          switch ( desc->Type )
>          {
> -        default:
> -            type = E820_RESERVED;
> -            break;
> -        case EfiConventionalMemory:
>          case EfiBootServicesCode:
>          case EfiBootServicesData:
> +            if ( map_bs )

if ( !map_bs ) surely?  It is the else case which sets a type of E820_RAM.

~Andrew

> +            {
> +        default:
> +                type = E820_RESERVED;
> +                break;
> +            }
> +            /* fall through */
> +        case EfiConventionalMemory:
>              if ( !trampoline_phys && desc->PhysicalStart + len <= 0x100000 &&
>                   len >= cfg.size && desc->PhysicalStart + len > cfg.addr )
>                  cfg.addr = (desc->PhysicalStart + len - cfg.size) & 
> PAGE_MASK;
> --- a/xen/common/efi/boot.c
> +++ b/xen/common/efi/boot.c
> @@ -84,6 +84,7 @@ static SIMPLE_TEXT_OUTPUT_INTERFACE *__i
>  static SIMPLE_TEXT_OUTPUT_INTERFACE *__initdata StdErr;
>  
>  static UINT32 __initdata mdesc_ver;
> +static bool_t __initdata map_bs;
>  
>  static struct file __initdata cfg;
>  static struct file __initdata kernel;
> @@ -753,6 +754,8 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SY
>              {
>                  if ( wstrcmp(ptr + 1, L"basevideo") == 0 )
>                      base_video = 1;
> +                else if ( wstrcmp(ptr + 1, L"mapbs") == 0 )
> +                    map_bs = 1;
>                  else if ( wstrncmp(ptr + 1, L"cfg=", 4) == 0 )
>                      cfg_file_name = ptr + 5;
>                  else if ( i + 1 < argc && wstrcmp(ptr + 1, L"cfg") == 0 )
> @@ -762,6 +765,7 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SY
>                  {
>                      PrintStr(L"Xen EFI Loader options:\r\n");
>                      PrintStr(L"-basevideo   retain current video mode\r\n");
> +                    PrintStr(L"-mapbs       map 
> EfiBootServices{Code,Data}\r\n");
>                      PrintStr(L"-cfg=<file>  specify configuration file\r\n");
>                      PrintStr(L"-help, -?    display this help\r\n");
>                      blexit(NULL);
> @@ -1158,7 +1162,8 @@ void __init efi_init_memory(void)
>      } *extra, *extra_head = NULL;
>  #endif
>  
> -    printk(XENLOG_INFO "EFI memory map:\n");
> +    printk(XENLOG_INFO "EFI memory map:%s\n",
> +           map_bs ? " (mapping BootServices)" : "");
>      for ( i = 0; i < efi_memmap_size; i += efi_mdesc_size )
>      {
>          EFI_MEMORY_DESCRIPTOR *desc = efi_memmap + i;
> @@ -1171,7 +1176,11 @@ void __init efi_init_memory(void)
>                 desc->PhysicalStart, desc->PhysicalStart + len - 1,
>                 desc->Type, desc->Attribute);
>  
> -        if ( !efi_rs_enable || !(desc->Attribute & EFI_MEMORY_RUNTIME) )
> +        if ( !efi_rs_enable ||
> +             (!(desc->Attribute & EFI_MEMORY_RUNTIME) &&
> +              (!map_bs ||
> +               (desc->Type != EfiBootServicesCode &&
> +                desc->Type != EfiBootServicesData))) )
>              continue;
>  
>          desc->VirtualStart = INVALID_VIRTUAL_ADDRESS;
> @@ -1257,7 +1266,10 @@ void __init efi_init_memory(void)
>      {
>          const EFI_MEMORY_DESCRIPTOR *desc = efi_memmap + i;
>  
> -        if ( (desc->Attribute & EFI_MEMORY_RUNTIME) &&
> +        if ( ((desc->Attribute & EFI_MEMORY_RUNTIME) ||
> +              (map_bs &&
> +               (desc->Type == EfiBootServicesCode ||
> +                desc->Type == EfiBootServicesData))) &&
>               desc->VirtualStart != INVALID_VIRTUAL_ADDRESS &&
>               desc->VirtualStart != desc->PhysicalStart )
>              copy_mapping(PFN_DOWN(desc->PhysicalStart),
>
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to