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

Re: [Xen-devel] [PATCH v3 16/35] OvmfPkg/XenHypercallLib: Enable it in PEIM



On 07/04/19 16:42, Anthony PERARD wrote:
> Allow to use Xen hypercalls earlier, during the PEIM stage, but
> XenHypercallLibInit() must be called once the XenInfo HOB is created
> with the HyperPage setup.
> 
> Change the return value of XenHypercallLibInit so failure can be
> detected when the call shouldn't fail, but still have the constructor
> always succeed.
> 
> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> ---
> 
> Notes:
>     v3:
>     - only modify XenHypercallLib, and to the modification of XenPlatformPei
>       in a separated patch.
>     - Allow XenHypercallLibInit to be called outside the library instead of
>       creating a new function, but also return failure on failure,
>       and have a new constructor that never fail.
> 
>  .../Library/XenHypercallLib/XenHypercallLib.inf  |  4 ++--
>  OvmfPkg/Include/Library/XenHypercallLib.h        | 12 ++++++++++++
>  .../Library/XenHypercallLib/X86XenHypercall.c    |  8 +-------
>  OvmfPkg/Library/XenHypercallLib/XenHypercall.c   | 16 ++++++++++++++++
>  4 files changed, 31 insertions(+), 9 deletions(-)
> 
> diff --git a/OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf 
> b/OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
> index 1208f0057a..21ce5b4434 100644
> --- a/OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
> +++ b/OvmfPkg/Library/XenHypercallLib/XenHypercallLib.inf
> @@ -12,10 +12,10 @@ [Defines]
>    FILE_GUID                      = B5EE9A32-CA5A-49A8-82E3-ADA4CCB77C7C
>    MODULE_TYPE                    = BASE
>    VERSION_STRING                 = 1.0
> -  CONSTRUCTOR                    = XenHypercallLibInit
> +  CONSTRUCTOR                    = XenHypercallLibConstruct
>  
>  [Defines.IA32, Defines.X64]
> -  LIBRARY_CLASS                  = XenHypercallLib|DXE_DRIVER UEFI_DRIVER
> +  LIBRARY_CLASS                  = XenHypercallLib|PEIM DXE_DRIVER 
> UEFI_DRIVER
>  
>  [Defines.ARM, Defines.AARCH64]
>    LIBRARY_CLASS                  = XenHypercallLib
> diff --git a/OvmfPkg/Include/Library/XenHypercallLib.h 
> b/OvmfPkg/Include/Library/XenHypercallLib.h
> index c43822782b..c1491dd652 100644
> --- a/OvmfPkg/Include/Library/XenHypercallLib.h
> +++ b/OvmfPkg/Include/Library/XenHypercallLib.h
> @@ -10,6 +10,18 @@
>  #ifndef __XEN_HYPERCALL_LIB_H__
>  #define __XEN_HYPERCALL_LIB_H__
>  
> +/**
> +  To call when the gEfiXenInfoGuid HOB became available after the library 
> init
> +  function has already been executed.
> +
> +  This allow to make hypercall in the PEIM stage.
> +**/
> +RETURN_STATUS
> +EFIAPI
> +XenHypercallLibInit (
> +  VOID
> +  );
> +
>  /**
>    Check if the Xen Hypercall library is able to make calls to the Xen
>    hypervisor.
> diff --git a/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c 
> b/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c
> index 27083f924f..f779e46470 100644
> --- a/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c
> +++ b/OvmfPkg/Library/XenHypercallLib/X86XenHypercall.c
> @@ -59,13 +59,7 @@ XenHypercallLibInit (
>  
>    GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid);
>    if (GuidHob == NULL) {
> -    //
> -    // We don't fail library construction, since that has catastrophic
> -    // consequences for client modules (whereas those modules may easily be
> -    // running on a non-Xen platform). Instead, XenHypercallIsAvailable() 
> above
> -    // will return FALSE.
> -    //
> -    return RETURN_SUCCESS;
> +    return RETURN_NOT_FOUND;
>    }
>    XenInfo = (EFI_XEN_INFO *) GET_GUID_HOB_DATA (GuidHob);
>    HyperPage = XenInfo->HyperPages;
> diff --git a/OvmfPkg/Library/XenHypercallLib/XenHypercall.c 
> b/OvmfPkg/Library/XenHypercallLib/XenHypercall.c
> index a2c41a2a69..d4fa802743 100644
> --- a/OvmfPkg/Library/XenHypercallLib/XenHypercall.c
> +++ b/OvmfPkg/Library/XenHypercallLib/XenHypercall.c
> @@ -15,6 +15,22 @@
>  #include <Library/DebugLib.h>
>  #include <Library/XenHypercallLib.h>
>  
> +RETURN_STATUS
> +EFIAPI
> +XenHypercallLibConstruct (
> +  VOID
> +  )
> +{
> +  XenHypercallLibInit ();
> +  //
> +  // We don't fail library construction, since that has catastrophic
> +  // consequences for client modules (whereas those modules may easily be
> +  // running on a non-Xen platform). Instead, XenHypercallIsAvailable()
> +  // will return FALSE.
> +  //
> +  return RETURN_SUCCESS;
> +}
> +
>  UINT64
>  EFIAPI
>  XenHypercallHvmGetParam (
> 

Reviewed-by: Laszlo Ersek <lersek@xxxxxxxxxx>

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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