]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/XenPlatformPei: Setup HyperPages earlier
authorAnthony PERARD <anthony.perard@citrix.com>
Tue, 13 Aug 2019 11:31:03 +0000 (12:31 +0100)
committerLaszlo Ersek <lersek@redhat.com>
Wed, 21 Aug 2019 16:03:49 +0000 (18:03 +0200)
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@citrix.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20190813113119.14804-20-anthony.perard@citrix.com>

OvmfPkg/XenPlatformPei/Platform.c
OvmfPkg/XenPlatformPei/Platform.h
OvmfPkg/XenPlatformPei/Xen.c

index 5809eadb0b6bb6b514597772e613e114d667d017..6aaafc3ee966096663aa22b7174294ebb5e058f2 100644 (file)
@@ -416,6 +416,8 @@ InitializeXenPlatform (
     CpuDeadLoop ();\r
   }\r
 \r
+  XenConnect ();\r
+\r
   BootModeInitialization ();\r
   AddressWidthInitialization ();\r
 \r
index 925df31f885338f9bc8f6773e480a5b1cd45bee0..4a80057bdc2f4fbc31ee144d80cdb5d44391846b 100644 (file)
@@ -79,6 +79,11 @@ InstallClearCacheCallback (
   VOID\r
   );\r
 \r
+EFI_STATUS\r
+XenConnect (\r
+  VOID\r
+  );\r
+\r
 EFI_STATUS\r
 InitializeXen (\r
   VOID\r
index 2105304c41075ae1767b5f9a3415f5018390d852..29b42b746cc16e88552aa0d783fbb3fd0ea7d618 100644 (file)
@@ -72,14 +72,11 @@ XenGetE820Map (
 /**\r
   Connects to the Hypervisor.\r
 \r
-  @param  XenLeaf     CPUID index used to connect.\r
-\r
   @return EFI_STATUS\r
 \r
 **/\r
 EFI_STATUS\r
 XenConnect (\r
-  UINT32 XenLeaf\r
   )\r
 {\r
   UINT32 Index;\r
@@ -91,7 +88,13 @@ XenConnect (
   UINT32 *PVHResetVectorData;\r
   RETURN_STATUS Status;\r
 \r
-  AsmCpuid (XenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);\r
+  ASSERT (mXenLeaf != 0);\r
+\r
+  //\r
+  // Prepare HyperPages to be able to make hypercalls\r
+  //\r
+\r
+  AsmCpuid (mXenLeaf + 2, &TransferPages, &TransferReg, NULL, NULL);\r
   mXenInfo.HyperPages = AllocatePages (TransferPages);\r
   if (!mXenInfo.HyperPages) {\r
     return EFI_OUT_OF_RESOURCES;\r
@@ -103,7 +106,11 @@ XenConnect (
                    (Index << EFI_PAGE_SHIFT) + Index);\r
   }\r
 \r
-  AsmCpuid (XenLeaf + 1, &XenVersion, NULL, NULL, NULL);\r
+  //\r
+  // Find out the Xen version\r
+  //\r
+\r
+  AsmCpuid (mXenLeaf + 1, &XenVersion, NULL, NULL, NULL);\r
   DEBUG ((DEBUG_ERROR, "Detected Xen version %d.%d\n",\r
           XenVersion >> 16, XenVersion & 0xFFFF));\r
   mXenInfo.VersionMajor = (UINT16)(XenVersion >> 16);\r
@@ -262,12 +269,6 @@ InitializeXen (
 {\r
   RETURN_STATUS PcdStatus;\r
 \r
-  if (mXenLeaf == 0) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-\r
-  XenConnect (mXenLeaf);\r
-\r
   //\r
   // Reserve away HVMLOADER reserved memory [0xFC000000,0xFD000000).\r
   // This needs to match HVMLOADER RESERVED_MEMBASE/RESERVED_MEMSIZE.\r