]> xenbits.xensource.com Git - ovmf.git/commitdiff
OvmfPkg/CcExitLib: Use documented XSave area base size for SEV-SNP
authorRoth, Michael via groups.io <Michael.Roth=amd.com@groups.io>
Tue, 25 Apr 2023 20:32:58 +0000 (04:32 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Wed, 26 Apr 2023 13:39:01 +0000 (13:39 +0000)
Currently OVMF tries to rely on the base size advertised via the CPUID
table entries corresponding to leaf 0xD, sub-leafs 0x0/0x1. This will
generally work for KVM guests, but might not for other SEV-SNP
hypervisor implementations. Make the handling more robust by simply
using the base area size documented by the APM.

Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
Acked-by: Jiewen Yao <jiewen.yao@intel.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Michael Roth <michael.roth@amd.com>
OvmfPkg/Library/CcExitLib/CcExitVcHandler.c

index 94f0c4872c24db0a0de23f68189a69d4c1930216..0fc30f7bc4f6507b8f7dcfebf0fc35da78d3d4e8 100644 (file)
@@ -1114,8 +1114,6 @@ SnpEnabled (
 \r
   @param[in]      XFeaturesEnabled  Bit-mask of enabled XSAVE features/areas as\r
                                     indicated by XCR0/MSR_IA32_XSS bits\r
-  @param[in]      XSaveBaseSize     Base/legacy XSAVE area size (e.g. when\r
-                                    XCR0 is 1)\r
   @param[in, out] XSaveSize         Pointer to storage for calculated XSAVE area\r
                                     size\r
   @param[in]      Compacted         Whether or not the calculation is for the\r
@@ -1130,7 +1128,6 @@ STATIC
 BOOLEAN\r
 GetCpuidXSaveSize (\r
   IN     UINT64   XFeaturesEnabled,\r
-  IN     UINT32   XSaveBaseSize,\r
   IN OUT UINT32   *XSaveSize,\r
   IN     BOOLEAN  Compacted\r
   )\r
@@ -1139,7 +1136,10 @@ GetCpuidXSaveSize (
   UINT64              XFeaturesFound = 0;\r
   UINT32              Idx;\r
 \r
-  *XSaveSize = XSaveBaseSize;\r
+  //\r
+  // The base/legacy XSave size is documented to be 0x240 in the APM.\r
+  //\r
+  *XSaveSize = 0x240;\r
   CpuidInfo  = (SEV_SNP_CPUID_INFO *)(UINT64)PcdGet32 (PcdOvmfCpuidBase);\r
 \r
   for (Idx = 0; Idx < CpuidInfo->Count; Idx++) {\r
@@ -1355,7 +1355,6 @@ GetCpuidFw (
 \r
     if (!GetCpuidXSaveSize (\r
            XCr0 | XssMsr.Uint64,\r
-           *Ebx,\r
            &XSaveSize,\r
            Compacted\r
            ))\r