[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH-4.16 v3] xen/efi: Fix Grub2 boot on arm64


  • To: Luca Fancellu <luca.fancellu@xxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Fri, 5 Nov 2021 13:20:41 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HDqEUN4ssFvG7PbZpz12I1u9v5m0rsvpqScC+frE0dQ=; b=c6l+iPVxhMynBkjTVDBpAnIO+x+7BAX2HlfDH1R2V5cpXsQUom8Lu1K7sklyIXWgLdTXpNRcEXNhazFE1OQ0yWNKiRsoPCjf3MMTKN46xi/X5qaeO00dZiEm3jK7L70cPj6OMxzIXk5WMYLZddY5ljX10p56F4ZpY8mQItTDkmVP4ZmaSi9gJB0I/XOQZFai81mcVe4DVA3a/7sjTNHk0PfGOkiybQs0HmuPNSpjZ43W/iFofRuD1/7WcpL52oS9RTTjrH39eBmjkGrV2nwihyeH3XJ9CWlPc6aAWzge1RjrUKIARwU2smLPERuRQ/XQgOnkc4ZFhgRmxaP3v+/rTg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ePs1oEB/Vu9AYAITyjGBgiqGdyZJCHucQ0uWw30vEgmJkLUUGxXQzHinewyEOYODlHGv+87AQc0D3kCUS59NF0qkVUPVojulwSH7PST4ebuYbjIvqdWGxjcYX+vwFohA0+PFPo5BWfMdNFQnSvAgvewZKcZQWaDJcs87Da/7ozYKBsRmAnBdSC92L2/xap80iaE330NopDC0m80MRSW0xSXG4OhFUjOOzfmaMgNJTkOv5vNgRWzg4tTwRRxIczjX14qBxUjhBiibGltv+0PpJsf1ZZ+M5rmJn8XUS3EiXULpF1QgcVXV3ELj7mHd1FwS46TE7DS0dWulCk3fZQStAA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: bertrand.marquis@xxxxxxx, wei.chen@xxxxxxx, iwj@xxxxxxxxxxxxxx, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Fri, 05 Nov 2021 12:20:50 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 05.11.2021 12:21, Luca Fancellu wrote:
> --- a/xen/common/efi/boot.c
> +++ b/xen/common/efi/boot.c
> @@ -121,6 +121,8 @@ static char *get_value(const struct file *cfg, const char 
> *section,
>  static char *split_string(char *s);
>  static CHAR16 *s2w(union string *str);
>  static char *w2s(const union string *str);
> +static EFI_FILE_HANDLE get_parent_handle(EFI_LOADED_IMAGE *loaded_image,
> +                                         CHAR16 **leaf);
>  static bool read_file(EFI_FILE_HANDLE dir_handle, CHAR16 *name,
>                        struct file *file, const char *options);
>  static bool read_section(const EFI_LOADED_IMAGE *image, const CHAR16 *name,
> @@ -167,7 +169,7 @@ static void __init PrintErr(const CHAR16 *s)
>  }
>  
>  #ifndef CONFIG_HAS_DEVICE_TREE
> -static int __init efi_check_dt_boot(EFI_FILE_HANDLE dir_handle)
> +static int __init efi_check_dt_boot(EFI_LOADED_IMAGE *loaded_image)
>  {
>      return 0;
>  }
> @@ -1225,9 +1227,6 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
> *SystemTable)
>  
>      efi_arch_relocate_image(0);
>  
> -    /* Get the file system interface. */
> -    dir_handle = get_parent_handle(loaded_image, &file_name);
> -
>      if ( use_cfg_file )
>      {
>          UINTN depth, cols, rows, size;

With the dir_handle declaration also moved back here (as I did
indicated in reply to Stefano's proposal), ...

> @@ -1240,6 +1239,9 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
> *SystemTable)
>  
>          gop = efi_get_gop();
>  
> +        /* Get the file system interface. */
> +        dir_handle = get_parent_handle(loaded_image, &file_name);
> +
>          /* Read and parse the config file. */
>          if ( read_section(loaded_image, L"config", &cfg, NULL) )
>              PrintStr(L"Using builtin config file\r\n");
> @@ -1362,14 +1364,14 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
> *SystemTable)
>          efi_bs->FreePages(cfg.addr, PFN_UP(cfg.size));
>          cfg.addr = 0;
>  
> +        dir_handle->Close(dir_handle);
> +
>          if ( gop && !base_video )
>              gop_mode = efi_find_gop_mode(gop, cols, rows, depth);
>      }
>  
>      /* Get the number of boot modules specified on the DT or an error (<0) */
> -    dt_modules_found = efi_check_dt_boot(dir_handle);
> -
> -    dir_handle->Close(dir_handle);
> +    dt_modules_found = efi_check_dt_boot(loaded_image);
>  
>      if ( dt_modules_found < 0 )
>          /* efi_check_dt_boot throws some error */
> 

... all of the quoted part
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>

Down the road we will want to constify efi_check_dt_boot()'s parameter,
but that will require changes elsewhere as well.

Jan




 


Rackspace

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