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

Re: [Xen-devel] [edk2-devel] [PATCH v2 21/31] OvmfPkg/XenPlatformPei: Get E820 table via hypercall ...



On 04/09/19 13:08, Anthony PERARD wrote:
> .. when hvmloader haven't runned before OVMF. The only way left to get
> an E820 table is to ask Xen via an hypercall, the call can only be made
> once so keep the result cached for later.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> ---
>  OvmfPkg/XenPlatformPei/Xen.c | 46 +++++++++++++++++++-
>  1 file changed, 45 insertions(+), 1 deletion(-)

(1) Please change the subject to

  OvmfPkg/XenPlatformPei: no hvmloader: get the E820 table via hypercall

(70 characters); and pls write a self-contained commit message body.

(2) s/haven't runned/hasn't run/

> 
> diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c
> index 23ff3102b5..f8cee671d8 100644
> --- a/OvmfPkg/XenPlatformPei/Xen.c
> +++ b/OvmfPkg/XenPlatformPei/Xen.c
> @@ -33,6 +33,7 @@
>  #include <Library/MtrrLib.h>
>  #include <IndustryStandard/Xen/arch-x86/hvm/start_info.h>
>  #include <Library/XenHypercallLib.h>
> +#include <IndustryStandard/Xen/memory.h>
>  
>  #include "Platform.h"
>  #include "Xen.h"
> @@ -46,6 +47,8 @@ EFI_XEN_INFO mXenInfo;
>  // Only the E820 table is used by OVMF.
>  //
>  EFI_XEN_OVMF_INFO *mXenHvmloaderInfo;
> +EFI_E820_ENTRY64 E820Entries[128];
> +UINT32 E820EntriesCount;

(3) Please prefix both of these global variables with "m".

(I'd also recommend STATIC.)

>  
>  /**
>    Returns E820 map provided by Xen
> @@ -61,6 +64,12 @@ XenGetE820Map (
>    UINT32 *Count
>    )
>  {
> +  INTN ReturnCode;
> +  xen_memory_map_t Parameters;
> +  UINTN LoopIndex;
> +  UINTN Index;
> +  EFI_E820_ENTRY64 TmpEntry;
> +
>    //
>    // Get E820 produced by hvmloader
>    //
> @@ -72,7 +81,42 @@ XenGetE820Map (
>      return EFI_SUCCESS;
>    }
>  
> -  return EFI_NOT_FOUND;
> +  //
> +  // Otherwise, get the E820 table from the Xen hypervisor
> +  //
> +
> +  if (E820EntriesCount > 0) {
> +    *Entries = E820Entries;
> +    *Count = E820EntriesCount;
> +    return EFI_SUCCESS;
> +  }
> +
> +  Parameters.nr_entries = 128;
> +  set_xen_guest_handle (Parameters.buffer, E820Entries);
> +
> +  // Returns a errno
> +  ReturnCode = XenHypercallMemoryOp (XENMEM_memory_map, &Parameters);
> +  ASSERT (ReturnCode == 0);
> +
> +  E820EntriesCount = Parameters.nr_entries;
> +
> +  //
> +  // Sort E820 entries
> +  //
> +  for (LoopIndex = 1; LoopIndex < E820EntriesCount; LoopIndex++) {
> +    for (Index = LoopIndex; Index < E820EntriesCount; Index++) {
> +      if (E820Entries[Index - 1].BaseAddr > E820Entries[Index].BaseAddr) {
> +        TmpEntry = E820Entries[Index];
> +        E820Entries[Index] = E820Entries[Index - 1];
> +        E820Entries[Index - 1] = TmpEntry;
> +      }
> +    }
> +  }
> +
> +  *Count = E820EntriesCount;
> +  *Entries = E820Entries;
> +
> +  return EFI_SUCCESS;
>  }
>  
>  /**
> 

"xen_memory_map_t" and "set_xen_guest_handle" look really foreign in edk2, but 
I guess we'll have to live with them.

With (1) through (3) updated:

Acked-by: Laszlo Ersek <lersek@xxxxxxxxxx>

Thanks
Laszlo

_______________________________________________
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®.