[edk2-devel] [PATCH v3 20/35] OvmfPkg/XenPlatformPei: Setup HyperPages earlier

Anthony PERARD anthony.perard at citrix.com
Thu Jul 4 14:42:18 UTC 2019


We are going to need to make an hypercall in order to retreive the E820
table from the hypervisor before been able to setup the memory.

Calling XenConnect earlier will allow to setup the XenHypercallLib
earlier to allow to make hypercalls.

While here, add some comments in XenConnect().

Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689
Signed-off-by: Anthony PERARD <anthony.perard at citrix.com>
Acked-by: Laszlo Ersek <lersek at redhat.com>
---
 OvmfPkg/XenPlatformPei/Platform.h |  5 +++++
 OvmfPkg/XenPlatformPei/Platform.c |  2 ++
 OvmfPkg/XenPlatformPei/Xen.c      | 23 ++++++++++++-----------
 3 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/OvmfPkg/XenPlatformPei/Platform.h b/OvmfPkg/XenPlatformPei/Platform.h
index 925df31f88..4a80057bdc 100644
--- a/OvmfPkg/XenPlatformPei/Platform.h
+++ b/OvmfPkg/XenPlatformPei/Platform.h
@@ -79,6 +79,11 @@ InstallClearCacheCallback (
   VOID

   );

 

+EFI_STATUS

+XenConnect (

+  VOID

+  );

+

 EFI_STATUS

 InitializeXen (

   VOID

diff --git a/OvmfPkg/XenPlatformPei/Platform.c b/OvmfPkg/XenPlatformPei/Platform.c
index c97a2fb6c1..52f6048ca4 100644
--- a/OvmfPkg/XenPlatformPei/Platform.c
+++ b/OvmfPkg/XenPlatformPei/Platform.c
@@ -416,6 +416,8 @@ InitializeXenPlatform (
     CpuDeadLoop ();

   }

 

+  XenConnect ();

+

   BootModeInitialization ();

   AddressWidthInitialization ();

 

diff --git a/OvmfPkg/XenPlatformPei/Xen.c b/OvmfPkg/XenPlatformPei/Xen.c
index 37e9cff4b4..7d1696bb22 100644
--- a/OvmfPkg/XenPlatformPei/Xen.c
+++ b/OvmfPkg/XenPlatformPei/Xen.c
@@ -72,14 +72,11 @@ XenGetE820Map (
 /**

   Connects to the Hypervisor.

  

-  @param  XenLeaf     CPUID index used to connect.

-

   @return EFI_STATUS

 

 **/

 EFI_STATUS

 XenConnect (

-  UINT32 XenLeaf

   )

 {

   UINT32 Index;

@@ -91,7 +88,13 @@ XenConnect (
   UINT32 *PVHResetVectorData;

   RETURN_STATUS Status;

 

-  AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);

+  ASSERT (mXenLeaf != 0);

+

+  //

+  // Prepare HyperPages to be able to make hypercalls

+  //

+

+  AsmCpuid (mXenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);

   mXenInfo.HyperPages = AllocatePages (TransferPages);

   if (!mXenInfo.HyperPages) {

     return EFI_OUT_OF_RESOURCES;

@@ -103,7 +106,11 @@ XenConnect (
                    (Index << EFI_PAGE_SHIFT) + Index);

   }

 

-  AsmCpuid (XenLeaf + 1, &XenVersion, NULL, NULL, NULL);

+  //

+  // Find out the Xen version

+  //

+

+  AsmCpuid (mXenLeaf + 1, &XenVersion, NULL, NULL, NULL);

   DEBUG ((EFI_D_ERROR, "Detected Xen version %d.%d\n",

           XenVersion >> 16, XenVersion & 0xFFFF));

   mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);

@@ -262,12 +269,6 @@ InitializeXen (
 {

   RETURN_STATUS PcdStatus;

 

-  if (mXenLeaf == 0) {

-    return EFI_NOT_FOUND;

-  }

-

-  XenConnect (mXenLeaf);

-

   //

   // Reserve away HVMLOADER reserved memory [0xFC000000,0xFD000000).

   // This needs to match HVMLOADER RESERVED_MEMBASE/RESERVED_MEMSIZE.

-- 
Anthony PERARD


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#43291): https://edk2.groups.io/g/devel/message/43291
Mute This Topic: https://groups.io/mt/32308711/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list