public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH v3 0/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
@ 2024-01-30 13:04 Gerd Hoffmann
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 1/4] " Gerd Hoffmann
                   ` (3 more replies)
  0 siblings, 4 replies; 30+ messages in thread
From: Gerd Hoffmann @ 2024-01-30 13:04 UTC (permalink / raw)
  To: devel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Gerd Hoffmann,
	Tom Lendacky, Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

Also add #defines for MTRR cache types to ArchitecturalMsr.h
and followup patches to use these #defines.

v2:
 - Use constants for the mtrr enum too.
 - Don't include linux kernel source code in the commit message,
   use a link instead.  Also reword the description.

Gerd Hoffmann (4):
  OvmfPkg/Sec: Setup MTRR early in the boot process.
  MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types
  UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h
  OvmfPkg/Sec: use cache type #defines from ArchitecturalMsr.h

 .../Include/Register/Intel/ArchitecturalMsr.h |  7 ++++
 UefiCpuPkg/Include/Library/MtrrLib.h          | 26 ++++++++-------
 OvmfPkg/IntelTdx/Sec/SecMain.c                | 32 +++++++++++++++++++
 OvmfPkg/Library/PlatformInitLib/MemDetect.c   | 10 +++---
 OvmfPkg/Sec/SecMain.c                         | 32 +++++++++++++++++++
 5 files changed, 90 insertions(+), 17 deletions(-)

-- 
2.43.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114781): https://edk2.groups.io/g/devel/message/114781
Mute This Topic: https://groups.io/mt/104052590/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-01-30 13:04 [edk2-devel] [PATCH v3 0/4] OvmfPkg/Sec: Setup MTRR early in the boot process Gerd Hoffmann
@ 2024-01-30 13:04 ` Gerd Hoffmann
  2024-01-30 19:22   ` Laszlo Ersek
  2024-05-22  8:59   ` Corvin Köhne
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types Gerd Hoffmann
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 30+ messages in thread
From: Gerd Hoffmann @ 2024-01-30 13:04 UTC (permalink / raw)
  To: devel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Gerd Hoffmann,
	Tom Lendacky, Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

Specifically before running lzma uncompress of the main firmware volume.
This is needed to make sure caching is enabled, otherwise the uncompress
can be extremely slow.

Adapt the ASSERTs and MTRR setup in PlatformInitLib to the changes.

Background:  Depending on virtual machine configuration kvm may uses EPT
memory types to apply guest MTRR settings.  In case MTRRs are disabled
kvm will use the uncachable memory type for all mappings.  The
vmx_get_mt_mask() function in the linux kernel handles this and can be
found here:

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/kvm/vmx/vmx.c?h=v6.7.1#n7580

In most VM configurations kvm uses MTRR_TYPE_WRBACK unconditionally.  In
case the VM has a mdev device assigned that is not the case though.

Before commit e8aa4c6546ad ("UefiCpuPkg/ResetVector: Cache Disable
should not be set by default in CR0") kvm also ended up using
MTRR_TYPE_WRBACK due to KVM_X86_QUIRK_CD_NW_CLEARED.  After that commit
kvm evaluates guest mtrr settings, which why setting up MTRRs early is
important now.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 OvmfPkg/IntelTdx/Sec/SecMain.c              | 32 +++++++++++++++++++++
 OvmfPkg/Library/PlatformInitLib/MemDetect.c | 10 +++----
 OvmfPkg/Sec/SecMain.c                       | 32 +++++++++++++++++++++
 3 files changed, 69 insertions(+), 5 deletions(-)

diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c b/OvmfPkg/IntelTdx/Sec/SecMain.c
index 42a587adfa57..a218ca17a01a 100644
--- a/OvmfPkg/IntelTdx/Sec/SecMain.c
+++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
@@ -27,6 +27,8 @@
 #include <Library/TdxHelperLib.h>
 #include <Library/CcProbeLib.h>
 #include <Library/PeilessStartupLib.h>
+#include <Register/Intel/ArchitecturalMsr.h>
+#include <Register/Intel/Cpuid.h>
 
 #define SEC_IDT_ENTRY_COUNT  34
 
@@ -48,6 +50,31 @@ IA32_IDT_GATE_DESCRIPTOR  mIdtEntryTemplate = {
   }
 };
 
+//
+// Enable MTRR early, set default type to write back.
+// Needed to make sure caching is enabled,
+// without this lzma decompress can be very slow.
+//
+STATIC
+VOID
+SecMtrrSetup (
+  VOID
+  )
+{
+  CPUID_VERSION_INFO_EDX           Edx;
+  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
+
+  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
+  if (!Edx.Bits.MTRR) {
+    return;
+  }
+
+  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
+  DefType.Bits.Type = 6; /* write back */
+  DefType.Bits.E    = 1; /* enable */
+  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
+}
+
 VOID
 EFIAPI
 SecCoreStartupWithStack (
@@ -204,6 +231,11 @@ SecCoreStartupWithStack (
   InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
   DisableApicTimerInterrupt ();
 
+  //
+  // Initialize MTRR
+  //
+  SecMtrrSetup ();
+
   PeilessStartup (&SecCoreData);
 
   ASSERT (FALSE);
diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
index f042517bb64a..e89f63eee054 100644
--- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
+++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
@@ -1082,18 +1082,18 @@ PlatformQemuInitializeRam (
     MtrrGetAllMtrrs (&MtrrSettings);
 
     //
-    // MTRRs disabled, fixed MTRRs disabled, default type is uncached
+    // See SecMtrrSetup(), default type should be write back
     //
-    ASSERT ((MtrrSettings.MtrrDefType & BIT11) == 0);
+    ASSERT ((MtrrSettings.MtrrDefType & BIT11) != 0);
     ASSERT ((MtrrSettings.MtrrDefType & BIT10) == 0);
-    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == 0);
+    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == MTRR_CACHE_WRITE_BACK);
 
     //
     // flip default type to writeback
     //
-    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, 0x06);
+    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, MTRR_CACHE_WRITE_BACK);
     ZeroMem (&MtrrSettings.Variables, sizeof MtrrSettings.Variables);
-    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
+    MtrrSettings.MtrrDefType |= BIT10;
     MtrrSetAllMtrrs (&MtrrSettings);
 
     //
diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c
index 31da5d0ace51..46c54f2984ff 100644
--- a/OvmfPkg/Sec/SecMain.c
+++ b/OvmfPkg/Sec/SecMain.c
@@ -30,6 +30,8 @@
 #include <Ppi/MpInitLibDep.h>
 #include <Library/TdxHelperLib.h>
 #include <Library/CcProbeLib.h>
+#include <Register/Intel/ArchitecturalMsr.h>
+#include <Register/Intel/Cpuid.h>
 #include "AmdSev.h"
 
 #define SEC_IDT_ENTRY_COUNT  34
@@ -744,6 +746,31 @@ FindAndReportEntryPoints (
   return;
 }
 
+//
+// Enable MTRR early, set default type to write back.
+// Needed to make sure caching is enabled,
+// without this lzma decompress can be very slow.
+//
+STATIC
+VOID
+SecMtrrSetup (
+  VOID
+  )
+{
+  CPUID_VERSION_INFO_EDX           Edx;
+  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
+
+  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
+  if (!Edx.Bits.MTRR) {
+    return;
+  }
+
+  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
+  DefType.Bits.Type = 6; /* write back */
+  DefType.Bits.E    = 1; /* enable */
+  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
+}
+
 VOID
 EFIAPI
 SecCoreStartupWithStack (
@@ -942,6 +969,11 @@ SecCoreStartupWithStack (
   InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
   DisableApicTimerInterrupt ();
 
+  //
+  // Initialize MTRR
+  //
+  SecMtrrSetup ();
+
   //
   // Initialize Debug Agent to support source level debug in SEC/PEI phases before memory ready.
   //
-- 
2.43.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114782): https://edk2.groups.io/g/devel/message/114782
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types
  2024-01-30 13:04 [edk2-devel] [PATCH v3 0/4] OvmfPkg/Sec: Setup MTRR early in the boot process Gerd Hoffmann
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 1/4] " Gerd Hoffmann
@ 2024-01-30 13:04 ` Gerd Hoffmann
  2024-01-30 17:49   ` Michael D Kinney
                     ` (2 more replies)
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h Gerd Hoffmann
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 4/4] OvmfPkg/Sec: " Gerd Hoffmann
  3 siblings, 3 replies; 30+ messages in thread
From: Gerd Hoffmann @ 2024-01-30 13:04 UTC (permalink / raw)
  To: devel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Gerd Hoffmann,
	Tom Lendacky, Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 MdePkg/Include/Register/Intel/ArchitecturalMsr.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
index 756e7c86ec31..2b2e34b08c8b 100644
--- a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
+++ b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
@@ -2103,6 +2103,13 @@ typedef union {
 #define MSR_IA32_MTRR_PHYSBASE9  0x00000212
 /// @}
 
+#define MSR_IA32_MTRR_CACHE_UNCACHEABLE      0
+#define MSR_IA32_MTRR_CACHE_WRITE_COMBINING  1
+#define MSR_IA32_MTRR_CACHE_WRITE_THROUGH    4
+#define MSR_IA32_MTRR_CACHE_WRITE_PROTECTED  5
+#define MSR_IA32_MTRR_CACHE_WRITE_BACK       6
+#define MSR_IA32_MTRR_CACHE_INVALID_TYPE     7
+
 /**
   MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0 to
   #MSR_IA32_MTRR_PHYSBASE9
-- 
2.43.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114780): https://edk2.groups.io/g/devel/message/114780
Mute This Topic: https://groups.io/mt/104052589/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h
  2024-01-30 13:04 [edk2-devel] [PATCH v3 0/4] OvmfPkg/Sec: Setup MTRR early in the boot process Gerd Hoffmann
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 1/4] " Gerd Hoffmann
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types Gerd Hoffmann
@ 2024-01-30 13:04 ` Gerd Hoffmann
  2024-01-30 17:49   ` Michael D Kinney
                     ` (3 more replies)
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 4/4] OvmfPkg/Sec: " Gerd Hoffmann
  3 siblings, 4 replies; 30+ messages in thread
From: Gerd Hoffmann @ 2024-01-30 13:04 UTC (permalink / raw)
  To: devel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Gerd Hoffmann,
	Tom Lendacky, Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 UefiCpuPkg/Include/Library/MtrrLib.h | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/UefiCpuPkg/Include/Library/MtrrLib.h b/UefiCpuPkg/Include/Library/MtrrLib.h
index 86cc1aab3b8e..9d715d50dfb0 100644
--- a/UefiCpuPkg/Include/Library/MtrrLib.h
+++ b/UefiCpuPkg/Include/Library/MtrrLib.h
@@ -9,6 +9,8 @@
 #ifndef  _MTRR_LIB_H_
 #define  _MTRR_LIB_H_
 
+#include <Register/Intel/ArchitecturalMsr.h>
+
 //
 // According to IA32 SDM, MTRRs number and MSR offset are always consistent
 // for IA32 processor family
@@ -82,20 +84,20 @@ typedef struct _MTRR_SETTINGS_ {
 // Memory cache types
 //
 typedef enum {
-  CacheUncacheable    = 0,
-  CacheWriteCombining = 1,
-  CacheWriteThrough   = 4,
-  CacheWriteProtected = 5,
-  CacheWriteBack      = 6,
-  CacheInvalid        = 7
+  CacheUncacheable    = MSR_IA32_MTRR_CACHE_UNCACHEABLE,
+  CacheWriteCombining = MSR_IA32_MTRR_CACHE_WRITE_COMBINING,
+  CacheWriteThrough   = MSR_IA32_MTRR_CACHE_WRITE_THROUGH,
+  CacheWriteProtected = MSR_IA32_MTRR_CACHE_WRITE_PROTECTED,
+  CacheWriteBack      = MSR_IA32_MTRR_CACHE_WRITE_BACK,
+  CacheInvalid        = MSR_IA32_MTRR_CACHE_INVALID_TYPE,
 } MTRR_MEMORY_CACHE_TYPE;
 
-#define  MTRR_CACHE_UNCACHEABLE      0
-#define  MTRR_CACHE_WRITE_COMBINING  1
-#define  MTRR_CACHE_WRITE_THROUGH    4
-#define  MTRR_CACHE_WRITE_PROTECTED  5
-#define  MTRR_CACHE_WRITE_BACK       6
-#define  MTRR_CACHE_INVALID_TYPE     7
+#define  MTRR_CACHE_UNCACHEABLE      MSR_IA32_MTRR_CACHE_UNCACHEABLE
+#define  MTRR_CACHE_WRITE_COMBINING  MSR_IA32_MTRR_CACHE_WRITE_COMBINING
+#define  MTRR_CACHE_WRITE_THROUGH    MSR_IA32_MTRR_CACHE_WRITE_THROUGH
+#define  MTRR_CACHE_WRITE_PROTECTED  MSR_IA32_MTRR_CACHE_WRITE_PROTECTED
+#define  MTRR_CACHE_WRITE_BACK       MSR_IA32_MTRR_CACHE_WRITE_BACK
+#define  MTRR_CACHE_INVALID_TYPE     MSR_IA32_MTRR_CACHE_INVALID_TYPE
 
 typedef struct {
   UINT64                    BaseAddress;
-- 
2.43.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114783): https://edk2.groups.io/g/devel/message/114783
Mute This Topic: https://groups.io/mt/104052592/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [edk2-devel] [PATCH v3 4/4] OvmfPkg/Sec: use cache type #defines from ArchitecturalMsr.h
  2024-01-30 13:04 [edk2-devel] [PATCH v3 0/4] OvmfPkg/Sec: Setup MTRR early in the boot process Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h Gerd Hoffmann
@ 2024-01-30 13:04 ` Gerd Hoffmann
  2024-01-30 19:25   ` Laszlo Ersek
  3 siblings, 1 reply; 30+ messages in thread
From: Gerd Hoffmann @ 2024-01-30 13:04 UTC (permalink / raw)
  To: devel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Gerd Hoffmann,
	Tom Lendacky, Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 OvmfPkg/IntelTdx/Sec/SecMain.c | 2 +-
 OvmfPkg/Sec/SecMain.c          | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c b/OvmfPkg/IntelTdx/Sec/SecMain.c
index a218ca17a01a..9006c7e6a1b3 100644
--- a/OvmfPkg/IntelTdx/Sec/SecMain.c
+++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
@@ -70,7 +70,7 @@ SecMtrrSetup (
   }
 
   DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
-  DefType.Bits.Type = 6; /* write back */
+  DefType.Bits.Type = MSR_IA32_MTRR_CACHE_WRITE_BACK;
   DefType.Bits.E    = 1; /* enable */
   AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
 }
diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c
index 46c54f2984ff..4be371eff330 100644
--- a/OvmfPkg/Sec/SecMain.c
+++ b/OvmfPkg/Sec/SecMain.c
@@ -766,7 +766,7 @@ SecMtrrSetup (
   }
 
   DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
-  DefType.Bits.Type = 6; /* write back */
+  DefType.Bits.Type = MSR_IA32_MTRR_CACHE_WRITE_BACK;
   DefType.Bits.E    = 1; /* enable */
   AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
 }
-- 
2.43.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114784): https://edk2.groups.io/g/devel/message/114784
Mute This Topic: https://groups.io/mt/104052593/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h Gerd Hoffmann
@ 2024-01-30 17:49   ` Michael D Kinney
  2024-01-30 19:24   ` Laszlo Ersek
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 30+ messages in thread
From: Michael D Kinney @ 2024-01-30 17:49 UTC (permalink / raw)
  To: devel@edk2.groups.io, kraxel@redhat.com
  Cc: Michael Roth, Oliver Steffen, Yao, Jiewen, Tom Lendacky,
	Laszlo Ersek, Xu, Min M, Ard Biesheuvel, Aktas, Erdem,
	Kinney, Michael D

Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Gerd
> Hoffmann
> Sent: Tuesday, January 30, 2024 5:05 AM
> To: devel@edk2.groups.io
> Cc: Michael Roth <michael.roth@amd.com>; Oliver Steffen
> <osteffen@redhat.com>; Yao, Jiewen <jiewen.yao@intel.com>; Gerd Hoffmann
> <kraxel@redhat.com>; Tom Lendacky <thomas.lendacky@amd.com>; Laszlo
> Ersek <lersek@redhat.com>; Xu, Min M <min.m.xu@intel.com>; Ard
> Biesheuvel <ardb+tianocore@kernel.org>; Aktas, Erdem
> <erdemaktas@google.com>
> Subject: [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache
> type #defines from ArchitecturalMsr.h
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  UefiCpuPkg/Include/Library/MtrrLib.h | 26 ++++++++++++++------------
>  1 file changed, 14 insertions(+), 12 deletions(-)
> 
> diff --git a/UefiCpuPkg/Include/Library/MtrrLib.h
> b/UefiCpuPkg/Include/Library/MtrrLib.h
> index 86cc1aab3b8e..9d715d50dfb0 100644
> --- a/UefiCpuPkg/Include/Library/MtrrLib.h
> +++ b/UefiCpuPkg/Include/Library/MtrrLib.h
> @@ -9,6 +9,8 @@
>  #ifndef  _MTRR_LIB_H_
>  #define  _MTRR_LIB_H_
> 
> +#include <Register/Intel/ArchitecturalMsr.h>
> +
>  //
>  // According to IA32 SDM, MTRRs number and MSR offset are always
> consistent
>  // for IA32 processor family
> @@ -82,20 +84,20 @@ typedef struct _MTRR_SETTINGS_ {
>  // Memory cache types
>  //
>  typedef enum {
> -  CacheUncacheable    = 0,
> -  CacheWriteCombining = 1,
> -  CacheWriteThrough   = 4,
> -  CacheWriteProtected = 5,
> -  CacheWriteBack      = 6,
> -  CacheInvalid        = 7
> +  CacheUncacheable    = MSR_IA32_MTRR_CACHE_UNCACHEABLE,
> +  CacheWriteCombining = MSR_IA32_MTRR_CACHE_WRITE_COMBINING,
> +  CacheWriteThrough   = MSR_IA32_MTRR_CACHE_WRITE_THROUGH,
> +  CacheWriteProtected = MSR_IA32_MTRR_CACHE_WRITE_PROTECTED,
> +  CacheWriteBack      = MSR_IA32_MTRR_CACHE_WRITE_BACK,
> +  CacheInvalid        = MSR_IA32_MTRR_CACHE_INVALID_TYPE,
>  } MTRR_MEMORY_CACHE_TYPE;
> 
> -#define  MTRR_CACHE_UNCACHEABLE      0
> -#define  MTRR_CACHE_WRITE_COMBINING  1
> -#define  MTRR_CACHE_WRITE_THROUGH    4
> -#define  MTRR_CACHE_WRITE_PROTECTED  5
> -#define  MTRR_CACHE_WRITE_BACK       6
> -#define  MTRR_CACHE_INVALID_TYPE     7
> +#define  MTRR_CACHE_UNCACHEABLE      MSR_IA32_MTRR_CACHE_UNCACHEABLE
> +#define  MTRR_CACHE_WRITE_COMBINING
> MSR_IA32_MTRR_CACHE_WRITE_COMBINING
> +#define  MTRR_CACHE_WRITE_THROUGH    MSR_IA32_MTRR_CACHE_WRITE_THROUGH
> +#define  MTRR_CACHE_WRITE_PROTECTED
> MSR_IA32_MTRR_CACHE_WRITE_PROTECTED
> +#define  MTRR_CACHE_WRITE_BACK       MSR_IA32_MTRR_CACHE_WRITE_BACK
> +#define  MTRR_CACHE_INVALID_TYPE     MSR_IA32_MTRR_CACHE_INVALID_TYPE
> 
>  typedef struct {
>    UINT64                    BaseAddress;
> --
> 2.43.0
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114808): https://edk2.groups.io/g/devel/message/114808
Mute This Topic: https://groups.io/mt/104052592/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types Gerd Hoffmann
@ 2024-01-30 17:49   ` Michael D Kinney
  2024-01-30 19:23   ` Laszlo Ersek
  2024-01-30 19:28   ` Laszlo Ersek
  2 siblings, 0 replies; 30+ messages in thread
From: Michael D Kinney @ 2024-01-30 17:49 UTC (permalink / raw)
  To: devel@edk2.groups.io, kraxel@redhat.com
  Cc: Michael Roth, Oliver Steffen, Yao, Jiewen, Tom Lendacky,
	Laszlo Ersek, Xu, Min M, Ard Biesheuvel, Aktas, Erdem,
	Kinney, Michael D

Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Gerd
> Hoffmann
> Sent: Tuesday, January 30, 2024 5:05 AM
> To: devel@edk2.groups.io
> Cc: Michael Roth <michael.roth@amd.com>; Oliver Steffen
> <osteffen@redhat.com>; Yao, Jiewen <jiewen.yao@intel.com>; Gerd Hoffmann
> <kraxel@redhat.com>; Tom Lendacky <thomas.lendacky@amd.com>; Laszlo
> Ersek <lersek@redhat.com>; Xu, Min M <min.m.xu@intel.com>; Ard
> Biesheuvel <ardb+tianocore@kernel.org>; Aktas, Erdem
> <erdemaktas@google.com>
> Subject: [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add
> #defines for MTRR cache types
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  MdePkg/Include/Register/Intel/ArchitecturalMsr.h | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> index 756e7c86ec31..2b2e34b08c8b 100644
> --- a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> +++ b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> @@ -2103,6 +2103,13 @@ typedef union {
>  #define MSR_IA32_MTRR_PHYSBASE9  0x00000212
>  /// @}
> 
> +#define MSR_IA32_MTRR_CACHE_UNCACHEABLE      0
> +#define MSR_IA32_MTRR_CACHE_WRITE_COMBINING  1
> +#define MSR_IA32_MTRR_CACHE_WRITE_THROUGH    4
> +#define MSR_IA32_MTRR_CACHE_WRITE_PROTECTED  5
> +#define MSR_IA32_MTRR_CACHE_WRITE_BACK       6
> +#define MSR_IA32_MTRR_CACHE_INVALID_TYPE     7
> +
>  /**
>    MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0 to
>    #MSR_IA32_MTRR_PHYSBASE9
> --
> 2.43.0
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114809): https://edk2.groups.io/g/devel/message/114809
Mute This Topic: https://groups.io/mt/104052589/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 1/4] " Gerd Hoffmann
@ 2024-01-30 19:22   ` Laszlo Ersek
  2024-01-31 12:06     ` Laszlo Ersek
  2024-05-22  8:59   ` Corvin Köhne
  1 sibling, 1 reply; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-30 19:22 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky, Min Xu,
	Ard Biesheuvel, Erdem Aktas

On 1/30/24 14:04, Gerd Hoffmann wrote:
> Specifically before running lzma uncompress of the main firmware volume.
> This is needed to make sure caching is enabled, otherwise the uncompress
> can be extremely slow.
> 
> Adapt the ASSERTs and MTRR setup in PlatformInitLib to the changes.
> 
> Background:  Depending on virtual machine configuration kvm may uses EPT
> memory types to apply guest MTRR settings.  In case MTRRs are disabled
> kvm will use the uncachable memory type for all mappings.  The
> vmx_get_mt_mask() function in the linux kernel handles this and can be
> found here:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/kvm/vmx/vmx.c?h=v6.7.1#n7580
> 
> In most VM configurations kvm uses MTRR_TYPE_WRBACK unconditionally.  In
> case the VM has a mdev device assigned that is not the case though.
> 
> Before commit e8aa4c6546ad ("UefiCpuPkg/ResetVector: Cache Disable
> should not be set by default in CR0") kvm also ended up using
> MTRR_TYPE_WRBACK due to KVM_X86_QUIRK_CD_NW_CLEARED.  After that commit
> kvm evaluates guest mtrr settings, which why setting up MTRRs early is
> important now.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  OvmfPkg/IntelTdx/Sec/SecMain.c              | 32 +++++++++++++++++++++
>  OvmfPkg/Library/PlatformInitLib/MemDetect.c | 10 +++----
>  OvmfPkg/Sec/SecMain.c                       | 32 +++++++++++++++++++++
>  3 files changed, 69 insertions(+), 5 deletions(-)
> 
> diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c b/OvmfPkg/IntelTdx/Sec/SecMain.c
> index 42a587adfa57..a218ca17a01a 100644
> --- a/OvmfPkg/IntelTdx/Sec/SecMain.c
> +++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
> @@ -27,6 +27,8 @@
>  #include <Library/TdxHelperLib.h>
>  #include <Library/CcProbeLib.h>
>  #include <Library/PeilessStartupLib.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> +#include <Register/Intel/Cpuid.h>
>  
>  #define SEC_IDT_ENTRY_COUNT  34
>  
> @@ -48,6 +50,31 @@ IA32_IDT_GATE_DESCRIPTOR  mIdtEntryTemplate = {
>    }
>  };
>  
> +//
> +// Enable MTRR early, set default type to write back.
> +// Needed to make sure caching is enabled,
> +// without this lzma decompress can be very slow.
> +//
> +STATIC
> +VOID
> +SecMtrrSetup (
> +  VOID
> +  )
> +{
> +  CPUID_VERSION_INFO_EDX           Edx;
> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> +
> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
> +  if (!Edx.Bits.MTRR) {
> +    return;
> +  }
> +
> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> +  DefType.Bits.Type = 6; /* write back */
> +  DefType.Bits.E    = 1; /* enable */
> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
> +}
> +
>  VOID
>  EFIAPI
>  SecCoreStartupWithStack (
> @@ -204,6 +231,11 @@ SecCoreStartupWithStack (
>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
>    DisableApicTimerInterrupt ();
>  
> +  //
> +  // Initialize MTRR
> +  //
> +  SecMtrrSetup ();
> +
>    PeilessStartup (&SecCoreData);
>  
>    ASSERT (FALSE);
> diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> index f042517bb64a..e89f63eee054 100644
> --- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> +++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> @@ -1082,18 +1082,18 @@ PlatformQemuInitializeRam (
>      MtrrGetAllMtrrs (&MtrrSettings);
>  
>      //
> -    // MTRRs disabled, fixed MTRRs disabled, default type is uncached
> +    // See SecMtrrSetup(), default type should be write back
>      //
> -    ASSERT ((MtrrSettings.MtrrDefType & BIT11) == 0);
> +    ASSERT ((MtrrSettings.MtrrDefType & BIT11) != 0);
>      ASSERT ((MtrrSettings.MtrrDefType & BIT10) == 0);
> -    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == 0);
> +    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == MTRR_CACHE_WRITE_BACK);
>  
>      //
>      // flip default type to writeback
>      //
> -    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, 0x06);
> +    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, MTRR_CACHE_WRITE_BACK);
>      ZeroMem (&MtrrSettings.Variables, sizeof MtrrSettings.Variables);
> -    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
> +    MtrrSettings.MtrrDefType |= BIT10;
>      MtrrSetAllMtrrs (&MtrrSettings);
>  
>      //
> diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c
> index 31da5d0ace51..46c54f2984ff 100644
> --- a/OvmfPkg/Sec/SecMain.c
> +++ b/OvmfPkg/Sec/SecMain.c
> @@ -30,6 +30,8 @@
>  #include <Ppi/MpInitLibDep.h>
>  #include <Library/TdxHelperLib.h>
>  #include <Library/CcProbeLib.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> +#include <Register/Intel/Cpuid.h>
>  #include "AmdSev.h"
>  
>  #define SEC_IDT_ENTRY_COUNT  34
> @@ -744,6 +746,31 @@ FindAndReportEntryPoints (
>    return;
>  }
>  
> +//
> +// Enable MTRR early, set default type to write back.
> +// Needed to make sure caching is enabled,
> +// without this lzma decompress can be very slow.
> +//
> +STATIC
> +VOID
> +SecMtrrSetup (
> +  VOID
> +  )
> +{
> +  CPUID_VERSION_INFO_EDX           Edx;
> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> +
> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
> +  if (!Edx.Bits.MTRR) {
> +    return;
> +  }
> +
> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> +  DefType.Bits.Type = 6; /* write back */
> +  DefType.Bits.E    = 1; /* enable */
> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
> +}
> +
>  VOID
>  EFIAPI
>  SecCoreStartupWithStack (
> @@ -942,6 +969,11 @@ SecCoreStartupWithStack (
>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
>    DisableApicTimerInterrupt ();
>  
> +  //
> +  // Initialize MTRR
> +  //
> +  SecMtrrSetup ();
> +
>    //
>    // Initialize Debug Agent to support source level debug in SEC/PEI phases before memory ready.
>    //

Cannot comment on the "OvmfPkg/IntelTdx/Sec/SecMain.c" source file
changes, but for the rest:

Reviewed-by: Laszlo Ersek <lersek@redhat.com>



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114818): https://edk2.groups.io/g/devel/message/114818
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types Gerd Hoffmann
  2024-01-30 17:49   ` Michael D Kinney
@ 2024-01-30 19:23   ` Laszlo Ersek
  2024-01-30 19:28   ` Laszlo Ersek
  2 siblings, 0 replies; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-30 19:23 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky, Min Xu,
	Ard Biesheuvel, Erdem Aktas

On 1/30/24 14:04, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  MdePkg/Include/Register/Intel/ArchitecturalMsr.h | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> index 756e7c86ec31..2b2e34b08c8b 100644
> --- a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> +++ b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> @@ -2103,6 +2103,13 @@ typedef union {
>  #define MSR_IA32_MTRR_PHYSBASE9  0x00000212
>  /// @}
>  
> +#define MSR_IA32_MTRR_CACHE_UNCACHEABLE      0
> +#define MSR_IA32_MTRR_CACHE_WRITE_COMBINING  1
> +#define MSR_IA32_MTRR_CACHE_WRITE_THROUGH    4
> +#define MSR_IA32_MTRR_CACHE_WRITE_PROTECTED  5
> +#define MSR_IA32_MTRR_CACHE_WRITE_BACK       6
> +#define MSR_IA32_MTRR_CACHE_INVALID_TYPE     7
> +
>  /**
>    MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0 to
>    #MSR_IA32_MTRR_PHYSBASE9

Reviewed-by: Laszlo Ersek <lersek@redhat.com>



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114819): https://edk2.groups.io/g/devel/message/114819
Mute This Topic: https://groups.io/mt/104052589/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h Gerd Hoffmann
  2024-01-30 17:49   ` Michael D Kinney
@ 2024-01-30 19:24   ` Laszlo Ersek
  2024-01-30 19:26   ` Laszlo Ersek
  2024-01-30 19:29   ` Laszlo Ersek
  3 siblings, 0 replies; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-30 19:24 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky, Min Xu,
	Ard Biesheuvel, Erdem Aktas

On 1/30/24 14:04, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  UefiCpuPkg/Include/Library/MtrrLib.h | 26 ++++++++++++++------------
>  1 file changed, 14 insertions(+), 12 deletions(-)
> 
> diff --git a/UefiCpuPkg/Include/Library/MtrrLib.h b/UefiCpuPkg/Include/Library/MtrrLib.h
> index 86cc1aab3b8e..9d715d50dfb0 100644
> --- a/UefiCpuPkg/Include/Library/MtrrLib.h
> +++ b/UefiCpuPkg/Include/Library/MtrrLib.h
> @@ -9,6 +9,8 @@
>  #ifndef  _MTRR_LIB_H_
>  #define  _MTRR_LIB_H_
>  
> +#include <Register/Intel/ArchitecturalMsr.h>
> +
>  //
>  // According to IA32 SDM, MTRRs number and MSR offset are always consistent
>  // for IA32 processor family
> @@ -82,20 +84,20 @@ typedef struct _MTRR_SETTINGS_ {
>  // Memory cache types
>  //
>  typedef enum {
> -  CacheUncacheable    = 0,
> -  CacheWriteCombining = 1,
> -  CacheWriteThrough   = 4,
> -  CacheWriteProtected = 5,
> -  CacheWriteBack      = 6,
> -  CacheInvalid        = 7
> +  CacheUncacheable    = MSR_IA32_MTRR_CACHE_UNCACHEABLE,
> +  CacheWriteCombining = MSR_IA32_MTRR_CACHE_WRITE_COMBINING,
> +  CacheWriteThrough   = MSR_IA32_MTRR_CACHE_WRITE_THROUGH,
> +  CacheWriteProtected = MSR_IA32_MTRR_CACHE_WRITE_PROTECTED,
> +  CacheWriteBack      = MSR_IA32_MTRR_CACHE_WRITE_BACK,
> +  CacheInvalid        = MSR_IA32_MTRR_CACHE_INVALID_TYPE,
>  } MTRR_MEMORY_CACHE_TYPE;
>  
> -#define  MTRR_CACHE_UNCACHEABLE      0
> -#define  MTRR_CACHE_WRITE_COMBINING  1
> -#define  MTRR_CACHE_WRITE_THROUGH    4
> -#define  MTRR_CACHE_WRITE_PROTECTED  5
> -#define  MTRR_CACHE_WRITE_BACK       6
> -#define  MTRR_CACHE_INVALID_TYPE     7
> +#define  MTRR_CACHE_UNCACHEABLE      MSR_IA32_MTRR_CACHE_UNCACHEABLE
> +#define  MTRR_CACHE_WRITE_COMBINING  MSR_IA32_MTRR_CACHE_WRITE_COMBINING
> +#define  MTRR_CACHE_WRITE_THROUGH    MSR_IA32_MTRR_CACHE_WRITE_THROUGH
> +#define  MTRR_CACHE_WRITE_PROTECTED  MSR_IA32_MTRR_CACHE_WRITE_PROTECTED
> +#define  MTRR_CACHE_WRITE_BACK       MSR_IA32_MTRR_CACHE_WRITE_BACK
> +#define  MTRR_CACHE_INVALID_TYPE     MSR_IA32_MTRR_CACHE_INVALID_TYPE
>  
>  typedef struct {
>    UINT64                    BaseAddress;

Reviewed-by: Laszlo Ersek <lersek@redhat.com>



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114820): https://edk2.groups.io/g/devel/message/114820
Mute This Topic: https://groups.io/mt/104052592/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 4/4] OvmfPkg/Sec: use cache type #defines from ArchitecturalMsr.h
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 4/4] OvmfPkg/Sec: " Gerd Hoffmann
@ 2024-01-30 19:25   ` Laszlo Ersek
  0 siblings, 0 replies; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-30 19:25 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky, Min Xu,
	Ard Biesheuvel, Erdem Aktas

On 1/30/24 14:04, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  OvmfPkg/IntelTdx/Sec/SecMain.c | 2 +-
>  OvmfPkg/Sec/SecMain.c          | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c b/OvmfPkg/IntelTdx/Sec/SecMain.c
> index a218ca17a01a..9006c7e6a1b3 100644
> --- a/OvmfPkg/IntelTdx/Sec/SecMain.c
> +++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
> @@ -70,7 +70,7 @@ SecMtrrSetup (
>    }
>  
>    DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> -  DefType.Bits.Type = 6; /* write back */
> +  DefType.Bits.Type = MSR_IA32_MTRR_CACHE_WRITE_BACK;
>    DefType.Bits.E    = 1; /* enable */
>    AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
>  }
> diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c
> index 46c54f2984ff..4be371eff330 100644
> --- a/OvmfPkg/Sec/SecMain.c
> +++ b/OvmfPkg/Sec/SecMain.c
> @@ -766,7 +766,7 @@ SecMtrrSetup (
>    }
>  
>    DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> -  DefType.Bits.Type = 6; /* write back */
> +  DefType.Bits.Type = MSR_IA32_MTRR_CACHE_WRITE_BACK;
>    DefType.Bits.E    = 1; /* enable */
>    AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
>  }

Reviewed-by: Laszlo Ersek <lersek@redhat.com>



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114821): https://edk2.groups.io/g/devel/message/114821
Mute This Topic: https://groups.io/mt/104052593/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h Gerd Hoffmann
  2024-01-30 17:49   ` Michael D Kinney
  2024-01-30 19:24   ` Laszlo Ersek
@ 2024-01-30 19:26   ` Laszlo Ersek
  2024-01-30 19:29   ` Laszlo Ersek
  3 siblings, 0 replies; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-30 19:26 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky, Min Xu,
	Ard Biesheuvel, Erdem Aktas, Michael Kinney

CC'ing Mike too

On 1/30/24 14:04, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  UefiCpuPkg/Include/Library/MtrrLib.h | 26 ++++++++++++++------------
>  1 file changed, 14 insertions(+), 12 deletions(-)
> 
> diff --git a/UefiCpuPkg/Include/Library/MtrrLib.h b/UefiCpuPkg/Include/Library/MtrrLib.h
> index 86cc1aab3b8e..9d715d50dfb0 100644
> --- a/UefiCpuPkg/Include/Library/MtrrLib.h
> +++ b/UefiCpuPkg/Include/Library/MtrrLib.h
> @@ -9,6 +9,8 @@
>  #ifndef  _MTRR_LIB_H_
>  #define  _MTRR_LIB_H_
>  
> +#include <Register/Intel/ArchitecturalMsr.h>
> +
>  //
>  // According to IA32 SDM, MTRRs number and MSR offset are always consistent
>  // for IA32 processor family
> @@ -82,20 +84,20 @@ typedef struct _MTRR_SETTINGS_ {
>  // Memory cache types
>  //
>  typedef enum {
> -  CacheUncacheable    = 0,
> -  CacheWriteCombining = 1,
> -  CacheWriteThrough   = 4,
> -  CacheWriteProtected = 5,
> -  CacheWriteBack      = 6,
> -  CacheInvalid        = 7
> +  CacheUncacheable    = MSR_IA32_MTRR_CACHE_UNCACHEABLE,
> +  CacheWriteCombining = MSR_IA32_MTRR_CACHE_WRITE_COMBINING,
> +  CacheWriteThrough   = MSR_IA32_MTRR_CACHE_WRITE_THROUGH,
> +  CacheWriteProtected = MSR_IA32_MTRR_CACHE_WRITE_PROTECTED,
> +  CacheWriteBack      = MSR_IA32_MTRR_CACHE_WRITE_BACK,
> +  CacheInvalid        = MSR_IA32_MTRR_CACHE_INVALID_TYPE,
>  } MTRR_MEMORY_CACHE_TYPE;
>  
> -#define  MTRR_CACHE_UNCACHEABLE      0
> -#define  MTRR_CACHE_WRITE_COMBINING  1
> -#define  MTRR_CACHE_WRITE_THROUGH    4
> -#define  MTRR_CACHE_WRITE_PROTECTED  5
> -#define  MTRR_CACHE_WRITE_BACK       6
> -#define  MTRR_CACHE_INVALID_TYPE     7
> +#define  MTRR_CACHE_UNCACHEABLE      MSR_IA32_MTRR_CACHE_UNCACHEABLE
> +#define  MTRR_CACHE_WRITE_COMBINING  MSR_IA32_MTRR_CACHE_WRITE_COMBINING
> +#define  MTRR_CACHE_WRITE_THROUGH    MSR_IA32_MTRR_CACHE_WRITE_THROUGH
> +#define  MTRR_CACHE_WRITE_PROTECTED  MSR_IA32_MTRR_CACHE_WRITE_PROTECTED
> +#define  MTRR_CACHE_WRITE_BACK       MSR_IA32_MTRR_CACHE_WRITE_BACK
> +#define  MTRR_CACHE_INVALID_TYPE     MSR_IA32_MTRR_CACHE_INVALID_TYPE
>  
>  typedef struct {
>    UINT64                    BaseAddress;




-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114822): https://edk2.groups.io/g/devel/message/114822
Mute This Topic: https://groups.io/mt/104052592/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types Gerd Hoffmann
  2024-01-30 17:49   ` Michael D Kinney
  2024-01-30 19:23   ` Laszlo Ersek
@ 2024-01-30 19:28   ` Laszlo Ersek
  2 siblings, 0 replies; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-30 19:28 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky, Min Xu,
	Ard Biesheuvel, Erdem Aktas, Liming Gao, Michael D Kinney,
	Zhiguang Liu

CC'ing MdePkg owners

On 1/30/24 14:04, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  MdePkg/Include/Register/Intel/ArchitecturalMsr.h | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> index 756e7c86ec31..2b2e34b08c8b 100644
> --- a/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> +++ b/MdePkg/Include/Register/Intel/ArchitecturalMsr.h
> @@ -2103,6 +2103,13 @@ typedef union {
>  #define MSR_IA32_MTRR_PHYSBASE9  0x00000212
>  /// @}
>  
> +#define MSR_IA32_MTRR_CACHE_UNCACHEABLE      0
> +#define MSR_IA32_MTRR_CACHE_WRITE_COMBINING  1
> +#define MSR_IA32_MTRR_CACHE_WRITE_THROUGH    4
> +#define MSR_IA32_MTRR_CACHE_WRITE_PROTECTED  5
> +#define MSR_IA32_MTRR_CACHE_WRITE_BACK       6
> +#define MSR_IA32_MTRR_CACHE_INVALID_TYPE     7
> +
>  /**
>    MSR information returned for MSR indexes #MSR_IA32_MTRR_PHYSBASE0 to
>    #MSR_IA32_MTRR_PHYSBASE9



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114823): https://edk2.groups.io/g/devel/message/114823
Mute This Topic: https://groups.io/mt/104052589/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h Gerd Hoffmann
                     ` (2 preceding siblings ...)
  2024-01-30 19:26   ` Laszlo Ersek
@ 2024-01-30 19:29   ` Laszlo Ersek
  3 siblings, 0 replies; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-30 19:29 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky, Min Xu,
	Ard Biesheuvel, Erdem Aktas, Rahul Kumar, Ray Ni

CC'ing Ray and Rahul

On 1/30/24 14:04, Gerd Hoffmann wrote:
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  UefiCpuPkg/Include/Library/MtrrLib.h | 26 ++++++++++++++------------
>  1 file changed, 14 insertions(+), 12 deletions(-)
> 
> diff --git a/UefiCpuPkg/Include/Library/MtrrLib.h b/UefiCpuPkg/Include/Library/MtrrLib.h
> index 86cc1aab3b8e..9d715d50dfb0 100644
> --- a/UefiCpuPkg/Include/Library/MtrrLib.h
> +++ b/UefiCpuPkg/Include/Library/MtrrLib.h
> @@ -9,6 +9,8 @@
>  #ifndef  _MTRR_LIB_H_
>  #define  _MTRR_LIB_H_
>  
> +#include <Register/Intel/ArchitecturalMsr.h>
> +
>  //
>  // According to IA32 SDM, MTRRs number and MSR offset are always consistent
>  // for IA32 processor family
> @@ -82,20 +84,20 @@ typedef struct _MTRR_SETTINGS_ {
>  // Memory cache types
>  //
>  typedef enum {
> -  CacheUncacheable    = 0,
> -  CacheWriteCombining = 1,
> -  CacheWriteThrough   = 4,
> -  CacheWriteProtected = 5,
> -  CacheWriteBack      = 6,
> -  CacheInvalid        = 7
> +  CacheUncacheable    = MSR_IA32_MTRR_CACHE_UNCACHEABLE,
> +  CacheWriteCombining = MSR_IA32_MTRR_CACHE_WRITE_COMBINING,
> +  CacheWriteThrough   = MSR_IA32_MTRR_CACHE_WRITE_THROUGH,
> +  CacheWriteProtected = MSR_IA32_MTRR_CACHE_WRITE_PROTECTED,
> +  CacheWriteBack      = MSR_IA32_MTRR_CACHE_WRITE_BACK,
> +  CacheInvalid        = MSR_IA32_MTRR_CACHE_INVALID_TYPE,
>  } MTRR_MEMORY_CACHE_TYPE;
>  
> -#define  MTRR_CACHE_UNCACHEABLE      0
> -#define  MTRR_CACHE_WRITE_COMBINING  1
> -#define  MTRR_CACHE_WRITE_THROUGH    4
> -#define  MTRR_CACHE_WRITE_PROTECTED  5
> -#define  MTRR_CACHE_WRITE_BACK       6
> -#define  MTRR_CACHE_INVALID_TYPE     7
> +#define  MTRR_CACHE_UNCACHEABLE      MSR_IA32_MTRR_CACHE_UNCACHEABLE
> +#define  MTRR_CACHE_WRITE_COMBINING  MSR_IA32_MTRR_CACHE_WRITE_COMBINING
> +#define  MTRR_CACHE_WRITE_THROUGH    MSR_IA32_MTRR_CACHE_WRITE_THROUGH
> +#define  MTRR_CACHE_WRITE_PROTECTED  MSR_IA32_MTRR_CACHE_WRITE_PROTECTED
> +#define  MTRR_CACHE_WRITE_BACK       MSR_IA32_MTRR_CACHE_WRITE_BACK
> +#define  MTRR_CACHE_INVALID_TYPE     MSR_IA32_MTRR_CACHE_INVALID_TYPE
>  
>  typedef struct {
>    UINT64                    BaseAddress;



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114824): https://edk2.groups.io/g/devel/message/114824
Mute This Topic: https://groups.io/mt/104052592/7686176
Mute #defines:https://edk2.groups.io/g/devel/mutehashtag/defines
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-01-30 19:22   ` Laszlo Ersek
@ 2024-01-31 12:06     ` Laszlo Ersek
  2024-02-01  5:20       ` Min Xu
  0 siblings, 1 reply; 30+ messages in thread
From: Laszlo Ersek @ 2024-01-31 12:06 UTC (permalink / raw)
  To: Min Xu
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky,
	Ard Biesheuvel, Erdem Aktas, edk2-devel-groups-io, Gerd Hoffmann

Hi Min,

On 1/30/24 20:22, Laszlo Ersek wrote:
> On 1/30/24 14:04, Gerd Hoffmann wrote:
>> Specifically before running lzma uncompress of the main firmware volume.
>> This is needed to make sure caching is enabled, otherwise the uncompress
>> can be extremely slow.
>>
>> Adapt the ASSERTs and MTRR setup in PlatformInitLib to the changes.
>>
>> Background:  Depending on virtual machine configuration kvm may uses EPT
>> memory types to apply guest MTRR settings.  In case MTRRs are disabled
>> kvm will use the uncachable memory type for all mappings.  The
>> vmx_get_mt_mask() function in the linux kernel handles this and can be
>> found here:
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/kvm/vmx/vmx.c?h=v6.7.1#n7580
>>
>> In most VM configurations kvm uses MTRR_TYPE_WRBACK unconditionally.  In
>> case the VM has a mdev device assigned that is not the case though.
>>
>> Before commit e8aa4c6546ad ("UefiCpuPkg/ResetVector: Cache Disable
>> should not be set by default in CR0") kvm also ended up using
>> MTRR_TYPE_WRBACK due to KVM_X86_QUIRK_CD_NW_CLEARED.  After that commit
>> kvm evaluates guest mtrr settings, which why setting up MTRRs early is
>> important now.
>>
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>> ---
>>  OvmfPkg/IntelTdx/Sec/SecMain.c              | 32 +++++++++++++++++++++
>>  OvmfPkg/Library/PlatformInitLib/MemDetect.c | 10 +++----
>>  OvmfPkg/Sec/SecMain.c                       | 32 +++++++++++++++++++++
>>  3 files changed, 69 insertions(+), 5 deletions(-)
>>
>> diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c b/OvmfPkg/IntelTdx/Sec/SecMain.c
>> index 42a587adfa57..a218ca17a01a 100644
>> --- a/OvmfPkg/IntelTdx/Sec/SecMain.c
>> +++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
>> @@ -27,6 +27,8 @@
>>  #include <Library/TdxHelperLib.h>
>>  #include <Library/CcProbeLib.h>
>>  #include <Library/PeilessStartupLib.h>
>> +#include <Register/Intel/ArchitecturalMsr.h>
>> +#include <Register/Intel/Cpuid.h>
>>  
>>  #define SEC_IDT_ENTRY_COUNT  34
>>  
>> @@ -48,6 +50,31 @@ IA32_IDT_GATE_DESCRIPTOR  mIdtEntryTemplate = {
>>    }
>>  };
>>  
>> +//
>> +// Enable MTRR early, set default type to write back.
>> +// Needed to make sure caching is enabled,
>> +// without this lzma decompress can be very slow.
>> +//
>> +STATIC
>> +VOID
>> +SecMtrrSetup (
>> +  VOID
>> +  )
>> +{
>> +  CPUID_VERSION_INFO_EDX           Edx;
>> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
>> +
>> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
>> +  if (!Edx.Bits.MTRR) {
>> +    return;
>> +  }
>> +
>> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
>> +  DefType.Bits.Type = 6; /* write back */
>> +  DefType.Bits.E    = 1; /* enable */
>> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
>> +}
>> +
>>  VOID
>>  EFIAPI
>>  SecCoreStartupWithStack (
>> @@ -204,6 +231,11 @@ SecCoreStartupWithStack (
>>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
>>    DisableApicTimerInterrupt ();
>>  
>> +  //
>> +  // Initialize MTRR
>> +  //
>> +  SecMtrrSetup ();
>> +
>>    PeilessStartup (&SecCoreData);
>>  
>>    ASSERT (FALSE);
>> diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
>> index f042517bb64a..e89f63eee054 100644
>> --- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
>> +++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
>> @@ -1082,18 +1082,18 @@ PlatformQemuInitializeRam (
>>      MtrrGetAllMtrrs (&MtrrSettings);
>>  
>>      //
>> -    // MTRRs disabled, fixed MTRRs disabled, default type is uncached
>> +    // See SecMtrrSetup(), default type should be write back
>>      //
>> -    ASSERT ((MtrrSettings.MtrrDefType & BIT11) == 0);
>> +    ASSERT ((MtrrSettings.MtrrDefType & BIT11) != 0);
>>      ASSERT ((MtrrSettings.MtrrDefType & BIT10) == 0);
>> -    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == 0);
>> +    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == MTRR_CACHE_WRITE_BACK);
>>  
>>      //
>>      // flip default type to writeback
>>      //
>> -    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, 0x06);
>> +    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, MTRR_CACHE_WRITE_BACK);
>>      ZeroMem (&MtrrSettings.Variables, sizeof MtrrSettings.Variables);
>> -    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
>> +    MtrrSettings.MtrrDefType |= BIT10;
>>      MtrrSetAllMtrrs (&MtrrSettings);
>>  
>>      //
>> diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c
>> index 31da5d0ace51..46c54f2984ff 100644
>> --- a/OvmfPkg/Sec/SecMain.c
>> +++ b/OvmfPkg/Sec/SecMain.c
>> @@ -30,6 +30,8 @@
>>  #include <Ppi/MpInitLibDep.h>
>>  #include <Library/TdxHelperLib.h>
>>  #include <Library/CcProbeLib.h>
>> +#include <Register/Intel/ArchitecturalMsr.h>
>> +#include <Register/Intel/Cpuid.h>
>>  #include "AmdSev.h"
>>  
>>  #define SEC_IDT_ENTRY_COUNT  34
>> @@ -744,6 +746,31 @@ FindAndReportEntryPoints (
>>    return;
>>  }
>>  
>> +//
>> +// Enable MTRR early, set default type to write back.
>> +// Needed to make sure caching is enabled,
>> +// without this lzma decompress can be very slow.
>> +//
>> +STATIC
>> +VOID
>> +SecMtrrSetup (
>> +  VOID
>> +  )
>> +{
>> +  CPUID_VERSION_INFO_EDX           Edx;
>> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
>> +
>> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
>> +  if (!Edx.Bits.MTRR) {
>> +    return;
>> +  }
>> +
>> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
>> +  DefType.Bits.Type = 6; /* write back */
>> +  DefType.Bits.E    = 1; /* enable */
>> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
>> +}
>> +
>>  VOID
>>  EFIAPI
>>  SecCoreStartupWithStack (
>> @@ -942,6 +969,11 @@ SecCoreStartupWithStack (
>>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
>>    DisableApicTimerInterrupt ();
>>  
>> +  //
>> +  // Initialize MTRR
>> +  //
>> +  SecMtrrSetup ();
>> +
>>    //
>>    // Initialize Debug Agent to support source level debug in SEC/PEI phases before memory ready.
>>    //
> 
> Cannot comment on the "OvmfPkg/IntelTdx/Sec/SecMain.c" source file
> changes, but for the rest:

Can you confirm (a) this patch is OK for
"OvmfPkg/IntelTdx/Sec/SecMain.c", and (b) this series fixes the slowdown
you had encountered?

(that's what's left before we can merge this series)

Thanks
Laszlo

> 
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
> 
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114893): https://edk2.groups.io/g/devel/message/114893
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-01-31 12:06     ` Laszlo Ersek
@ 2024-02-01  5:20       ` Min Xu
  2024-02-01  6:10         ` Sun, Yi Y
  2024-02-01  9:38         ` Gerd Hoffmann
  0 siblings, 2 replies; 30+ messages in thread
From: Min Xu @ 2024-02-01  5:20 UTC (permalink / raw)
  To: devel@edk2.groups.io, lersek@redhat.com
  Cc: Michael Roth, Oliver Steffen, Yao, Jiewen, Tom Lendacky,
	Ard Biesheuvel, Aktas, Erdem, Gerd Hoffmann, Sun, Yi Y,
	Huang, Jiaqing

On Wednesday, January 31, 2024 8:06 PM, Laszlo Ersek wrote:
> 
> Hi Min,
> 
> On 1/30/24 20:22, Laszlo Ersek wrote:
> > On 1/30/24 14:04, Gerd Hoffmann wrote:
> >> Specifically before running lzma uncompress of the main firmware
> volume.
> >> This is needed to make sure caching is enabled, otherwise the
> >> uncompress can be extremely slow.
> >>
> >> Adapt the ASSERTs and MTRR setup in PlatformInitLib to the changes.
> >>
> >> Background:  Depending on virtual machine configuration kvm may uses
> >> EPT memory types to apply guest MTRR settings.  In case MTRRs are
> >> disabled kvm will use the uncachable memory type for all mappings.
> >> The
> >> vmx_get_mt_mask() function in the linux kernel handles this and can
> >> be found here:
> >>
> >> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree
> >> /arch/x86/kvm/vmx/vmx.c?h=v6.7.1#n7580
> >>
> >> In most VM configurations kvm uses MTRR_TYPE_WRBACK
> unconditionally.
> >> In case the VM has a mdev device assigned that is not the case though.
> >>
> >> Before commit e8aa4c6546ad ("UefiCpuPkg/ResetVector: Cache Disable
> >> should not be set by default in CR0") kvm also ended up using
> >> MTRR_TYPE_WRBACK due to KVM_X86_QUIRK_CD_NW_CLEARED.  After
> that
> >> commit kvm evaluates guest mtrr settings, which why setting up MTRRs
> >> early is important now.
> >>
> >> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> >> ---
> >>  OvmfPkg/IntelTdx/Sec/SecMain.c              | 32 +++++++++++++++++++++
> >>  OvmfPkg/Library/PlatformInitLib/MemDetect.c | 10 +++----
> >>  OvmfPkg/Sec/SecMain.c                       | 32 +++++++++++++++++++++
> >>  3 files changed, 69 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c
> >> b/OvmfPkg/IntelTdx/Sec/SecMain.c index 42a587adfa57..a218ca17a01a
> >> 100644
> >> --- a/OvmfPkg/IntelTdx/Sec/SecMain.c
> >> +++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
> >> @@ -27,6 +27,8 @@
> >>  #include <Library/TdxHelperLib.h>
> >>  #include <Library/CcProbeLib.h>
> >>  #include <Library/PeilessStartupLib.h>
> >> +#include <Register/Intel/ArchitecturalMsr.h>
> >> +#include <Register/Intel/Cpuid.h>
> >>
> >>  #define SEC_IDT_ENTRY_COUNT  34
> >>
> >> @@ -48,6 +50,31 @@ IA32_IDT_GATE_DESCRIPTOR  mIdtEntryTemplate =
> {
> >>    }
> >>  };
> >>
> >> +//
> >> +// Enable MTRR early, set default type to write back.
> >> +// Needed to make sure caching is enabled, // without this lzma
> >> +decompress can be very slow.
> >> +//
> >> +STATIC
> >> +VOID
> >> +SecMtrrSetup (
> >> +  VOID
> >> +  )
> >> +{
> >> +  CPUID_VERSION_INFO_EDX           Edx;
> >> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> >> +
> >> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);  if
> >> + (!Edx.Bits.MTRR) {
> >> +    return;
> >> +  }
> >> +
> >> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> >> +  DefType.Bits.Type = 6; /* write back */
> >> +  DefType.Bits.E    = 1; /* enable */
> >> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64); }
> >> +
> >>  VOID
> >>  EFIAPI
> >>  SecCoreStartupWithStack (
> >> @@ -204,6 +231,11 @@ SecCoreStartupWithStack (
> >>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
> >>    DisableApicTimerInterrupt ();
> >>
> >> +  //
> >> +  // Initialize MTRR
> >> +  //
> >> +  SecMtrrSetup ();
> >> +
> >>    PeilessStartup (&SecCoreData);
> >>
> >>    ASSERT (FALSE);
> >> diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> >> b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> >> index f042517bb64a..e89f63eee054 100644
> >> --- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> >> +++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> >> @@ -1082,18 +1082,18 @@ PlatformQemuInitializeRam (
> >>      MtrrGetAllMtrrs (&MtrrSettings);
> >>
> >>      //
> >> -    // MTRRs disabled, fixed MTRRs disabled, default type is uncached
> >> +    // See SecMtrrSetup(), default type should be write back
> >>      //
> >> -    ASSERT ((MtrrSettings.MtrrDefType & BIT11) == 0);
> >> +    ASSERT ((MtrrSettings.MtrrDefType & BIT11) != 0);
> >>      ASSERT ((MtrrSettings.MtrrDefType & BIT10) == 0);
> >> -    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == 0);
> >> +    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) ==
> >> + MTRR_CACHE_WRITE_BACK);
> >>
> >>      //
> >>      // flip default type to writeback
> >>      //
> >> -    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, 0x06);
> >> +    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed,
> >> + MTRR_CACHE_WRITE_BACK);
> >>      ZeroMem (&MtrrSettings.Variables, sizeof MtrrSettings.Variables);
> >> -    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
> >> +    MtrrSettings.MtrrDefType |= BIT10;
> >>      MtrrSetAllMtrrs (&MtrrSettings);
> >>
> >>      //
> >> diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c index
> >> 31da5d0ace51..46c54f2984ff 100644
> >> --- a/OvmfPkg/Sec/SecMain.c
> >> +++ b/OvmfPkg/Sec/SecMain.c
> >> @@ -30,6 +30,8 @@
> >>  #include <Ppi/MpInitLibDep.h>
> >>  #include <Library/TdxHelperLib.h>
> >>  #include <Library/CcProbeLib.h>
> >> +#include <Register/Intel/ArchitecturalMsr.h>
> >> +#include <Register/Intel/Cpuid.h>
> >>  #include "AmdSev.h"
> >>
> >>  #define SEC_IDT_ENTRY_COUNT  34
> >> @@ -744,6 +746,31 @@ FindAndReportEntryPoints (
> >>    return;
> >>  }
> >>
> >> +//
> >> +// Enable MTRR early, set default type to write back.
> >> +// Needed to make sure caching is enabled, // without this lzma
> >> +decompress can be very slow.
> >> +//
> >> +STATIC
> >> +VOID
> >> +SecMtrrSetup (
> >> +  VOID
> >> +  )
> >> +{
> >> +  CPUID_VERSION_INFO_EDX           Edx;
> >> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> >> +
> >> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);  if
> >> + (!Edx.Bits.MTRR) {
> >> +    return;
> >> +  }
> >> +
> >> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> >> +  DefType.Bits.Type = 6; /* write back */
> >> +  DefType.Bits.E    = 1; /* enable */
> >> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64); }
> >> +
> >>  VOID
> >>  EFIAPI
> >>  SecCoreStartupWithStack (
> >> @@ -942,6 +969,11 @@ SecCoreStartupWithStack (
> >>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
> >>    DisableApicTimerInterrupt ();
> >>
> >> +  //
> >> +  // Initialize MTRR
> >> +  //
> >> +  SecMtrrSetup ();
> >> +
> >>    //
> >>    // Initialize Debug Agent to support source level debug in SEC/PEI phases
> before memory ready.
> >>    //
> >
> > Cannot comment on the "OvmfPkg/IntelTdx/Sec/SecMain.c" source file
> > changes, but for the rest:
> 
> Can you confirm (a) this patch is OK for "OvmfPkg/IntelTdx/Sec/SecMain.c",
> and (b) this series fixes the slowdown you had encountered?
> 
> (that's what's left before we can merge this series)
> 
We test the patch in TDX and find EXIT_REASON_CR_ACCESS is triggered in DXE phase. It cause an assert because it is not handled by CcExitHandleVe.

Thanks
Min


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114930): https://edk2.groups.io/g/devel/message/114930
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-01  5:20       ` Min Xu
@ 2024-02-01  6:10         ` Sun, Yi Y
  2024-02-01  9:43           ` Gerd Hoffmann
  2024-02-01  9:38         ` Gerd Hoffmann
  1 sibling, 1 reply; 30+ messages in thread
From: Sun, Yi Y @ 2024-02-01  6:10 UTC (permalink / raw)
  To: Xu, Min M, devel@edk2.groups.io, lersek@redhat.com
  Cc: Michael Roth, Oliver Steffen, Yao, Jiewen, Tom Lendacky,
	Ard Biesheuvel, Aktas, Erdem, Gerd Hoffmann, Huang, Jiaqing

Hi, all,

Per our test, this issue only happens when the mdev/vdev is assigned to VM. But PF(physical function)/VF(virtual function) assignment is good. Per Jiaqing's investigation, it is because that the mdev/vdev passthrough flow is different with PF/VF. For vdev/mdev passthrough to VM, the enforce_cache_coherency was enabled after device bound to iommufd. But it doesn't update the kvm coherency state after that. This makes the memory type be UNCACHABLE which causes the reading is very slow.

So, what is your opinion to fix it? Which side to fix it is better, ovmf or vfio? Thanks!

BTW, we have cooked a patch to fix it. But it bases on Intel internal repo. If it is necessary, we can rebase it to upstream.

BRs,
Yi Sun

> -----Original Message-----
> From: Xu, Min M <min.m.xu@intel.com>
> Sent: Thursday, February 1, 2024 1:21 PM
> To: devel@edk2.groups.io; lersek@redhat.com
> Cc: Michael Roth <michael.roth@amd.com>; Oliver Steffen
> <osteffen@redhat.com>; Yao, Jiewen <jiewen.yao@intel.com>; Tom
> Lendacky <thomas.lendacky@amd.com>; Ard Biesheuvel
> <ardb+tianocore@kernel.org>; Aktas, Erdem <erdemaktas@google.com>;
> Gerd Hoffmann <kraxel@redhat.com>; Sun, Yi Y <yi.y.sun@intel.com>;
> Huang, Jiaqing <jiaqing.huang@intel.com>
> Subject: RE: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in
> the boot process.
> 
> On Wednesday, January 31, 2024 8:06 PM, Laszlo Ersek wrote:
> >
> > Hi Min,
> >
> > On 1/30/24 20:22, Laszlo Ersek wrote:
> > > On 1/30/24 14:04, Gerd Hoffmann wrote:
> > >> Specifically before running lzma uncompress of the main firmware
> > volume.
> > >> This is needed to make sure caching is enabled, otherwise the
> > >> uncompress can be extremely slow.
> > >>
> > >> Adapt the ASSERTs and MTRR setup in PlatformInitLib to the changes.
> > >>
> > >> Background:  Depending on virtual machine configuration kvm may
> > >> uses EPT memory types to apply guest MTRR settings.  In case MTRRs
> > >> are disabled kvm will use the uncachable memory type for all mappings.
> > >> The
> > >> vmx_get_mt_mask() function in the linux kernel handles this and can
> > >> be found here:
> > >>
> > >> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tr
> > >> ee
> > >> /arch/x86/kvm/vmx/vmx.c?h=v6.7.1#n7580
> > >>
> > >> In most VM configurations kvm uses MTRR_TYPE_WRBACK
> > unconditionally.
> > >> In case the VM has a mdev device assigned that is not the case though.
> > >>
> > >> Before commit e8aa4c6546ad ("UefiCpuPkg/ResetVector: Cache Disable
> > >> should not be set by default in CR0") kvm also ended up using
> > >> MTRR_TYPE_WRBACK due to KVM_X86_QUIRK_CD_NW_CLEARED.
> After
> > that
> > >> commit kvm evaluates guest mtrr settings, which why setting up
> > >> MTRRs early is important now.
> > >>
> > >> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> > >> ---
> > >>  OvmfPkg/IntelTdx/Sec/SecMain.c              | 32 +++++++++++++++++++++
> > >>  OvmfPkg/Library/PlatformInitLib/MemDetect.c | 10 +++----
> > >>  OvmfPkg/Sec/SecMain.c                       | 32 +++++++++++++++++++++
> > >>  3 files changed, 69 insertions(+), 5 deletions(-)
> > >>
> > >> diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c
> > >> b/OvmfPkg/IntelTdx/Sec/SecMain.c index 42a587adfa57..a218ca17a01a
> > >> 100644
> > >> --- a/OvmfPkg/IntelTdx/Sec/SecMain.c
> > >> +++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
> > >> @@ -27,6 +27,8 @@
> > >>  #include <Library/TdxHelperLib.h>
> > >>  #include <Library/CcProbeLib.h>
> > >>  #include <Library/PeilessStartupLib.h>
> > >> +#include <Register/Intel/ArchitecturalMsr.h>
> > >> +#include <Register/Intel/Cpuid.h>
> > >>
> > >>  #define SEC_IDT_ENTRY_COUNT  34
> > >>
> > >> @@ -48,6 +50,31 @@ IA32_IDT_GATE_DESCRIPTOR  mIdtEntryTemplate
> =
> > {
> > >>    }
> > >>  };
> > >>
> > >> +//
> > >> +// Enable MTRR early, set default type to write back.
> > >> +// Needed to make sure caching is enabled, // without this lzma
> > >> +decompress can be very slow.
> > >> +//
> > >> +STATIC
> > >> +VOID
> > >> +SecMtrrSetup (
> > >> +  VOID
> > >> +  )
> > >> +{
> > >> +  CPUID_VERSION_INFO_EDX           Edx;
> > >> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> > >> +
> > >> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
> > >> + if
> > >> + (!Edx.Bits.MTRR) {
> > >> +    return;
> > >> +  }
> > >> +
> > >> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> > >> +  DefType.Bits.Type = 6; /* write back */
> > >> +  DefType.Bits.E    = 1; /* enable */
> > >> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64); }
> > >> +
> > >>  VOID
> > >>  EFIAPI
> > >>  SecCoreStartupWithStack (
> > >> @@ -204,6 +231,11 @@ SecCoreStartupWithStack (
> > >>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
> > >>    DisableApicTimerInterrupt ();
> > >>
> > >> +  //
> > >> +  // Initialize MTRR
> > >> +  //
> > >> +  SecMtrrSetup ();
> > >> +
> > >>    PeilessStartup (&SecCoreData);
> > >>
> > >>    ASSERT (FALSE);
> > >> diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> > >> b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> > >> index f042517bb64a..e89f63eee054 100644
> > >> --- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> > >> +++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> > >> @@ -1082,18 +1082,18 @@ PlatformQemuInitializeRam (
> > >>      MtrrGetAllMtrrs (&MtrrSettings);
> > >>
> > >>      //
> > >> -    // MTRRs disabled, fixed MTRRs disabled, default type is uncached
> > >> +    // See SecMtrrSetup(), default type should be write back
> > >>      //
> > >> -    ASSERT ((MtrrSettings.MtrrDefType & BIT11) == 0);
> > >> +    ASSERT ((MtrrSettings.MtrrDefType & BIT11) != 0);
> > >>      ASSERT ((MtrrSettings.MtrrDefType & BIT10) == 0);
> > >> -    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == 0);
> > >> +    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) ==
> > >> + MTRR_CACHE_WRITE_BACK);
> > >>
> > >>      //
> > >>      // flip default type to writeback
> > >>      //
> > >> -    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, 0x06);
> > >> +    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed,
> > >> + MTRR_CACHE_WRITE_BACK);
> > >>      ZeroMem (&MtrrSettings.Variables, sizeof MtrrSettings.Variables);
> > >> -    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
> > >> +    MtrrSettings.MtrrDefType |= BIT10;
> > >>      MtrrSetAllMtrrs (&MtrrSettings);
> > >>
> > >>      //
> > >> diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c index
> > >> 31da5d0ace51..46c54f2984ff 100644
> > >> --- a/OvmfPkg/Sec/SecMain.c
> > >> +++ b/OvmfPkg/Sec/SecMain.c
> > >> @@ -30,6 +30,8 @@
> > >>  #include <Ppi/MpInitLibDep.h>
> > >>  #include <Library/TdxHelperLib.h>
> > >>  #include <Library/CcProbeLib.h>
> > >> +#include <Register/Intel/ArchitecturalMsr.h>
> > >> +#include <Register/Intel/Cpuid.h>
> > >>  #include "AmdSev.h"
> > >>
> > >>  #define SEC_IDT_ENTRY_COUNT  34
> > >> @@ -744,6 +746,31 @@ FindAndReportEntryPoints (
> > >>    return;
> > >>  }
> > >>
> > >> +//
> > >> +// Enable MTRR early, set default type to write back.
> > >> +// Needed to make sure caching is enabled, // without this lzma
> > >> +decompress can be very slow.
> > >> +//
> > >> +STATIC
> > >> +VOID
> > >> +SecMtrrSetup (
> > >> +  VOID
> > >> +  )
> > >> +{
> > >> +  CPUID_VERSION_INFO_EDX           Edx;
> > >> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> > >> +
> > >> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
> > >> + if
> > >> + (!Edx.Bits.MTRR) {
> > >> +    return;
> > >> +  }
> > >> +
> > >> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> > >> +  DefType.Bits.Type = 6; /* write back */
> > >> +  DefType.Bits.E    = 1; /* enable */
> > >> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64); }
> > >> +
> > >>  VOID
> > >>  EFIAPI
> > >>  SecCoreStartupWithStack (
> > >> @@ -942,6 +969,11 @@ SecCoreStartupWithStack (
> > >>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
> > >>    DisableApicTimerInterrupt ();
> > >>
> > >> +  //
> > >> +  // Initialize MTRR
> > >> +  //
> > >> +  SecMtrrSetup ();
> > >> +
> > >>    //
> > >>    // Initialize Debug Agent to support source level debug in
> > >> SEC/PEI phases
> > before memory ready.
> > >>    //
> > >
> > > Cannot comment on the "OvmfPkg/IntelTdx/Sec/SecMain.c" source file
> > > changes, but for the rest:
> >
> > Can you confirm (a) this patch is OK for
> > "OvmfPkg/IntelTdx/Sec/SecMain.c", and (b) this series fixes the slowdown
> you had encountered?
> >
> > (that's what's left before we can merge this series)
> >
> We test the patch in TDX and find EXIT_REASON_CR_ACCESS is triggered in
> DXE phase. It cause an assert because it is not handled by CcExitHandleVe.
> 
> Thanks
> Min


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114977): https://edk2.groups.io/g/devel/message/114977
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-01  5:20       ` Min Xu
  2024-02-01  6:10         ` Sun, Yi Y
@ 2024-02-01  9:38         ` Gerd Hoffmann
  2024-02-12 15:22           ` Gerd Hoffmann
  1 sibling, 1 reply; 30+ messages in thread
From: Gerd Hoffmann @ 2024-02-01  9:38 UTC (permalink / raw)
  To: devel, min.m.xu
  Cc: lersek@redhat.com, Michael Roth, Oliver Steffen, Yao, Jiewen,
	Tom Lendacky, Ard Biesheuvel, Aktas, Erdem, Sun, Yi Y,
	Huang, Jiaqing

  Hi,

> > Can you confirm (a) this patch is OK for "OvmfPkg/IntelTdx/Sec/SecMain.c",
> > and (b) this series fixes the slowdown you had encountered?
> > 
> > (that's what's left before we can merge this series)
> > 
> We test the patch in TDX and find EXIT_REASON_CR_ACCESS is triggered in DXE phase.

Hmm.  Sure this caused by this patch series?  For the PEI-less TDX
build this series moves the MTRR setup to a different place in SEC.
Once the DXE phase started the MTRR configuration should be identical
with and without this patch series, and the series also doesn't touch
any control register.

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114939): https://edk2.groups.io/g/devel/message/114939
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-01  6:10         ` Sun, Yi Y
@ 2024-02-01  9:43           ` Gerd Hoffmann
  2024-02-01  9:49             ` Sun, Yi Y
  0 siblings, 1 reply; 30+ messages in thread
From: Gerd Hoffmann @ 2024-02-01  9:43 UTC (permalink / raw)
  To: Sun, Yi Y
  Cc: Xu, Min M, devel@edk2.groups.io, lersek@redhat.com, Michael Roth,
	Oliver Steffen, Yao, Jiewen, Tom Lendacky, Ard Biesheuvel,
	Aktas, Erdem, Huang, Jiaqing

On Thu, Feb 01, 2024 at 06:10:26AM +0000, Sun, Yi Y wrote:
> Hi, all,
> 
> Per our test, this issue only happens when the mdev/vdev is assigned
> to VM. But PF(physical function)/VF(virtual function) assignment is
> good. Per Jiaqing's investigation, it is because that the mdev/vdev
> passthrough flow is different with PF/VF. For vdev/mdev passthrough to
> VM, the enforce_cache_coherency was enabled after device bound to
> iommufd. But it doesn't update the kvm coherency state after that.
> This makes the memory type be UNCACHABLE which causes the reading is
> very slow.
> 
> So, what is your opinion to fix it? Which side to fix it is better,
> ovmf or vfio? Thanks!

Both?  For OVMF it surely makes sense to properly setup MTRRs.  And if
the cache coherency behavior of vfio is not correct that should be fixed
too of course.

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114940): https://edk2.groups.io/g/devel/message/114940
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-01  9:43           ` Gerd Hoffmann
@ 2024-02-01  9:49             ` Sun, Yi Y
  0 siblings, 0 replies; 30+ messages in thread
From: Sun, Yi Y @ 2024-02-01  9:49 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: Xu, Min M, devel@edk2.groups.io, lersek@redhat.com, Michael Roth,
	Oliver Steffen, Yao, Jiewen, Tom Lendacky, Ard Biesheuvel,
	Aktas, Erdem, Huang, Jiaqing



> -----Original Message-----
> From: Gerd Hoffmann <kraxel@redhat.com>
> Sent: Thursday, February 1, 2024 5:43 PM
> To: Sun, Yi Y <yi.y.sun@intel.com>
> Cc: Xu, Min M <min.m.xu@intel.com>; devel@edk2.groups.io;
> lersek@redhat.com; Michael Roth <michael.roth@amd.com>; Oliver Steffen
> <osteffen@redhat.com>; Yao, Jiewen <jiewen.yao@intel.com>; Tom
> Lendacky <thomas.lendacky@amd.com>; Ard Biesheuvel
> <ardb+tianocore@kernel.org>; Aktas, Erdem <erdemaktas@google.com>;
> Huang, Jiaqing <jiaqing.huang@intel.com>
> Subject: Re: RE: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early
> in the boot process.
> 
> On Thu, Feb 01, 2024 at 06:10:26AM +0000, Sun, Yi Y wrote:
> > Hi, all,
> >
> > Per our test, this issue only happens when the mdev/vdev is assigned
> > to VM. But PF(physical function)/VF(virtual function) assignment is
> > good. Per Jiaqing's investigation, it is because that the mdev/vdev
> > passthrough flow is different with PF/VF. For vdev/mdev passthrough to
> > VM, the enforce_cache_coherency was enabled after device bound to
> > iommufd. But it doesn't update the kvm coherency state after that.
> > This makes the memory type be UNCACHABLE which causes the reading is
> > very slow.
> >
> > So, what is your opinion to fix it? Which side to fix it is better,
> > ovmf or vfio? Thanks!
> 
> Both?  For OVMF it surely makes sense to properly setup MTRRs.  And if the
> cache coherency behavior of vfio is not correct that should be fixed too of
> course.
> 
Sounds good. Thanks!

BRs,
Yi Sun

> take care,
>   Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114979): https://edk2.groups.io/g/devel/message/114979
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-01  9:38         ` Gerd Hoffmann
@ 2024-02-12 15:22           ` Gerd Hoffmann
  2024-02-20  6:27             ` Min Xu
  0 siblings, 1 reply; 30+ messages in thread
From: Gerd Hoffmann @ 2024-02-12 15:22 UTC (permalink / raw)
  To: devel
  Cc: min.m.xu, lersek@redhat.com, Michael Roth, Oliver Steffen,
	Yao, Jiewen, Tom Lendacky, Ard Biesheuvel, Aktas, Erdem,
	Sun, Yi Y, Huang, Jiaqing

On Thu, Feb 01, 2024 at 10:38:43AM +0100, Gerd Hoffmann wrote:
>   Hi,
> 
> > > Can you confirm (a) this patch is OK for "OvmfPkg/IntelTdx/Sec/SecMain.c",
> > > and (b) this series fixes the slowdown you had encountered?
> > > 
> > > (that's what's left before we can merge this series)
> > > 
> > We test the patch in TDX and find EXIT_REASON_CR_ACCESS is triggered in DXE phase.
> 
> Hmm.  Sure this caused by this patch series?  For the PEI-less TDX
> build this series moves the MTRR setup to a different place in SEC.
> Once the DXE phase started the MTRR configuration should be identical
> with and without this patch series, and the series also doesn't touch
> any control register.

Ping.  Can you double-check please?  Our QE ran a test build with this
series applied through regression testing (including TDX) and has not
found any issues.

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115352): https://edk2.groups.io/g/devel/message/115352
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-12 15:22           ` Gerd Hoffmann
@ 2024-02-20  6:27             ` Min Xu
  2024-02-20  8:15               ` Gerd Hoffmann
  0 siblings, 1 reply; 30+ messages in thread
From: Min Xu @ 2024-02-20  6:27 UTC (permalink / raw)
  To: Gerd Hoffmann, devel@edk2.groups.io
  Cc: lersek@redhat.com, Michael Roth, Oliver Steffen, Yao, Jiewen,
	Tom Lendacky, Ard Biesheuvel, Aktas, Erdem, Sun, Yi Y,
	Huang, Jiaqing, Xu, Min M

On Monday, February 12, 2024 11:22 PM, Gerd Hoffmann wrote:
> On Thu, Feb 01, 2024 at 10:38:43AM +0100, Gerd Hoffmann wrote:
> >   Hi,
> >
> > > > Can you confirm (a) this patch is OK for
> > > > "OvmfPkg/IntelTdx/Sec/SecMain.c", and (b) this series fixes the slowdown
> you had encountered?
> > > >
> > > > (that's what's left before we can merge this series)
> > > >
> > > We test the patch in TDX and find EXIT_REASON_CR_ACCESS is triggered in
> DXE phase.
> >
> > Hmm.  Sure this caused by this patch series?  For the PEI-less TDX
> > build this series moves the MTRR setup to a different place in SEC.
> > Once the DXE phase started the MTRR configuration should be identical
> > with and without this patch series, and the series also doesn't touch
> > any control register.
> 
> Ping.  Can you double-check please?  Our QE ran a test build with this series
> applied through regression testing (including TDX) and has not found any
> issues.

We double check the patch-set (v3) for both OvmfPkgX64 and IntelTdx. It triggered EXIT_REASON_CR_ACCESS in DXE phase when launching a td-guest.
@Gerd, what's the qemu command and test environment your QE run the case? We'd like run it in our side.

Thanks
Min


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115624): https://edk2.groups.io/g/devel/message/115624
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-20  6:27             ` Min Xu
@ 2024-02-20  8:15               ` Gerd Hoffmann
  2024-04-11  6:56                 ` Corvin Köhne
  0 siblings, 1 reply; 30+ messages in thread
From: Gerd Hoffmann @ 2024-02-20  8:15 UTC (permalink / raw)
  To: devel, min.m.xu
  Cc: lersek@redhat.com, Michael Roth, Oliver Steffen, Yao, Jiewen,
	Tom Lendacky, Ard Biesheuvel, Aktas, Erdem, Sun, Yi Y,
	Huang, Jiaqing

On Tue, Feb 20, 2024 at 06:27:21AM +0000, Min Xu wrote:
> On Monday, February 12, 2024 11:22 PM, Gerd Hoffmann wrote:
> > On Thu, Feb 01, 2024 at 10:38:43AM +0100, Gerd Hoffmann wrote:
> > >   Hi,
> > >
> > > > > Can you confirm (a) this patch is OK for
> > > > > "OvmfPkg/IntelTdx/Sec/SecMain.c", and (b) this series fixes the slowdown
> > you had encountered?
> > > > >
> > > > > (that's what's left before we can merge this series)
> > > > >
> > > > We test the patch in TDX and find EXIT_REASON_CR_ACCESS is triggered in
> > DXE phase.
> > >
> > > Hmm.  Sure this caused by this patch series?  For the PEI-less TDX
> > > build this series moves the MTRR setup to a different place in SEC.
> > > Once the DXE phase started the MTRR configuration should be identical
> > > with and without this patch series, and the series also doesn't touch
> > > any control register.
> > 
> > Ping.  Can you double-check please?  Our QE ran a test build with this series
> > applied through regression testing (including TDX) and has not found any
> > issues.
> 
> We double check the patch-set (v3) for both OvmfPkgX64 and IntelTdx.
> It triggered EXIT_REASON_CR_ACCESS in DXE phase when launching a
> td-guest.

Have you been able to figure which control register access caused the
EXIT_REASON_CR_ACCESS?

> @Gerd, what's the qemu command and test environment your QE
> run the case? We'd like run it in our side.

<quote>

Tested edk2-ovmf-20231122-1.el9.rhel21704.20240202.1130.noarch with TDX guest, no issue found

Version:

edk2-ovmf-20231122-1.el9.rhel21704.20240202.1130.noarch

guest kernel: 5.14.0-415.el9.x86_64

qemu-kvm-8.0.0-15.el9s.x86_64
host kernel-5.14.0-411.test.el9s.x86_64

Steps:

$ sudo /usr/libexec/qemu-kvm  -accel kvm   -drive file=/home/zixchen/rhel94_tdx.qcow2,if=none,id=virtio-disk0   -device virtio-blk-pci,drive=virtio-disk0   -cpu host -smp 16 -m 10240 -object tdx-guest,id=tdx,debug=on   -machine q35,hpet=off,kernel_irqchip=split,memory-encryption=tdx,confidential-guest-support=tdx,memory-backend=ram1   -object memory-backend-ram,id=ram1,size=10240M,private=on  -nographic -vga none   -nodefaults -bios /usr/share/edk2/ovmf/OVMF.inteltdx.secboot.fd  -serial stdio  -netdev user,id=user.0 -device e1000,netdev=user.0

$ dmesg|grep -i tdx
[    0.000000] tdx: Guest detected
[    0.719122] TECH PREVIEW: Intel Trusted Domain Extensions (TDX) may not be fully supported.
[    0.719122]  Intel TDX
[    0.719122] process: using TDX aware idle routine

</quote>

Host configuration with the tdx test packages:
https://sigs.centos.org/virt/tdx/host/

Latest edk2 build (stable202311 + patches) has the patch series
included:

https://kojihub.stream.centos.org/koji/buildinfo?buildID=56985

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#115642): https://edk2.groups.io/g/devel/message/115642
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-02-20  8:15               ` Gerd Hoffmann
@ 2024-04-11  6:56                 ` Corvin Köhne
  2024-04-11  8:12                   ` Gerd Hoffmann
  0 siblings, 1 reply; 30+ messages in thread
From: Corvin Köhne @ 2024-04-11  6:56 UTC (permalink / raw)
  To: devel, kraxel, min.m.xu
  Cc: lersek@redhat.com, Michael Roth, Oliver Steffen, Yao, Jiewen,
	Tom Lendacky, Ard Biesheuvel, Aktas, Erdem, Sun, Yi Y,
	Huang, Jiaqing

[-- Attachment #1: Type: text/plain, Size: 3789 bytes --]

On Tue, 2024-02-20 at 09:15 +0100, Gerd Hoffmann wrote:
> On Tue, Feb 20, 2024 at 06:27:21AM +0000, Min Xu wrote:
> > On Monday, February 12, 2024 11:22 PM, Gerd Hoffmann wrote:
> > > On Thu, Feb 01, 2024 at 10:38:43AM +0100, Gerd Hoffmann wrote:
> > > >   Hi,
> > > > 
> > > > > > Can you confirm (a) this patch is OK for
> > > > > > "OvmfPkg/IntelTdx/Sec/SecMain.c", and (b) this series fixes
> > > > > > the slowdown
> > > you had encountered?
> > > > > > 
> > > > > > (that's what's left before we can merge this series)
> > > > > > 
> > > > > We test the patch in TDX and find EXIT_REASON_CR_ACCESS is
> > > > > triggered in
> > > DXE phase.
> > > > 
> > > > Hmm.  Sure this caused by this patch series?  For the PEI-less
> > > > TDX
> > > > build this series moves the MTRR setup to a different place in
> > > > SEC.
> > > > Once the DXE phase started the MTRR configuration should be
> > > > identical
> > > > with and without this patch series, and the series also doesn't
> > > > touch
> > > > any control register.
> > > 
> > > Ping.  Can you double-check please?  Our QE ran a test build with
> > > this series
> > > applied through regression testing (including TDX) and has not
> > > found any
> > > issues.
> > 
> > We double check the patch-set (v3) for both OvmfPkgX64 and
> > IntelTdx.
> > It triggered EXIT_REASON_CR_ACCESS in DXE phase when launching a
> > td-guest.
> 
> Have you been able to figure which control register access caused the
> EXIT_REASON_CR_ACCESS?
> 
> > @Gerd, what's the qemu command and test environment your QE
> > run the case? We'd like run it in our side.
> 
> <quote>
> 
> Tested edk2-ovmf-20231122-1.el9.rhel21704.20240202.1130.noarch with
> TDX guest, no issue found
> 
> Version:
> 
> edk2-ovmf-20231122-1.el9.rhel21704.20240202.1130.noarch
> 
> guest kernel: 5.14.0-415.el9.x86_64
> 
> qemu-kvm-8.0.0-15.el9s.x86_64
> host kernel-5.14.0-411.test.el9s.x86_64
> 
> Steps:
> 
> $ sudo /usr/libexec/qemu-kvm  -accel kvm   -drive
> file=/home/zixchen/rhel94_tdx.qcow2,if=none,id=virtio-disk0   -device
> virtio-blk-pci,drive=virtio-disk0   -cpu host -smp 16 -m 10240 -
> object tdx-guest,id=tdx,debug=on   -machine
> q35,hpet=off,kernel_irqchip=split,memory-encryption=tdx,confidential-
> guest-support=tdx,memory-backend=ram1   -object memory-backend-
> ram,id=ram1,size=10240M,private=on  -nographic -vga none   -
> nodefaults -bios /usr/share/edk2/ovmf/OVMF.inteltdx.secboot.fd  -
> serial stdio  -netdev user,id=user.0 -device e1000,netdev=user.0
> 
> $ dmesg|grep -i tdx
> [    0.000000] tdx: Guest detected
> [    0.719122] TECH PREVIEW: Intel Trusted Domain Extensions (TDX)
> may not be fully supported.
> [    0.719122]  Intel TDX
> [    0.719122] process: using TDX aware idle routine
> 
> </quote>
> 
> Host configuration with the tdx test packages:
> https://sigs.centos.org/virt/tdx/host/
> 
> Latest edk2 build (stable202311 + patches) has the patch series
> included:
> 
> https://kojihub.stream.centos.org/koji/buildinfo?buildID=56985
> 
> take care,
>   Gerd
> 
> 
> 
> 
> 
> 

Hi,

any progress on that patch?

I'm currently trying to passthrough the integrated GPU of an Intel
CPUs. When I add the GPU to the qemu command, I'm faced with the
descripted issue. This patch solves the issue.


-- 
Kind regards,
Corvin


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117617): https://edk2.groups.io/g/devel/message/117617
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-04-11  6:56                 ` Corvin Köhne
@ 2024-04-11  8:12                   ` Gerd Hoffmann
  2024-04-15  1:04                     ` Min Xu
  0 siblings, 1 reply; 30+ messages in thread
From: Gerd Hoffmann @ 2024-04-11  8:12 UTC (permalink / raw)
  To: devel, corvink
  Cc: min.m.xu, lersek@redhat.com, Michael Roth, Oliver Steffen,
	Yao, Jiewen, Tom Lendacky, Ard Biesheuvel, Aktas, Erdem,
	Sun, Yi Y, Huang, Jiaqing

  Hi,

> > > @Gerd, what's the qemu command and test environment your QE
> > > run the case? We'd like run it in our side.
> > 
> > <quote>
> > 
> > Tested edk2-ovmf-20231122-1.el9.rhel21704.20240202.1130.noarch with
> > TDX guest, no issue found
> > 
> > Version:
> > 
> > edk2-ovmf-20231122-1.el9.rhel21704.20240202.1130.noarch
> > 
> > guest kernel: 5.14.0-415.el9.x86_64
> > 
> > qemu-kvm-8.0.0-15.el9s.x86_64
> > host kernel-5.14.0-411.test.el9s.x86_64
> > 
> > Steps:
> > 
> > $ sudo /usr/libexec/qemu-kvm  -accel kvm   -drive
> > file=/home/zixchen/rhel94_tdx.qcow2,if=none,id=virtio-disk0   -device
> > virtio-blk-pci,drive=virtio-disk0   -cpu host -smp 16 -m 10240 -
> > object tdx-guest,id=tdx,debug=on   -machine
> > q35,hpet=off,kernel_irqchip=split,memory-encryption=tdx,confidential-
> > guest-support=tdx,memory-backend=ram1   -object memory-backend-
> > ram,id=ram1,size=10240M,private=on  -nographic -vga none   -
> > nodefaults -bios /usr/share/edk2/ovmf/OVMF.inteltdx.secboot.fd  -
> > serial stdio  -netdev user,id=user.0 -device e1000,netdev=user.0
> > 
> > $ dmesg|grep -i tdx
> > [    0.000000] tdx: Guest detected
> > [    0.719122] TECH PREVIEW: Intel Trusted Domain Extensions (TDX)
> > may not be fully supported.
> > [    0.719122]  Intel TDX
> > [    0.719122] process: using TDX aware idle routine
> > 
> > </quote>
> > 
> > Host configuration with the tdx test packages:
> > https://sigs.centos.org/virt/tdx/host/
> > 
> > Latest edk2 build (stable202311 + patches) has the patch series
> > included:
> > 
> > https://kojihub.stream.centos.org/koji/buildinfo?buildID=56985
> > 
> > take care,
> >   Gerd
> 
> Hi,
> 
> any progress on that patch?
> 
> I'm currently trying to passthrough the integrated GPU of an Intel
> CPUs. When I add the GPU to the qemu command, I'm faced with the
> descripted issue. This patch solves the issue.

On my end the state of affairs is unchanged.  Our builds have the patch
included and there are zero problems so far, the issue reported by Min
doesn't reproduce and it is still unclear what is going on.

Min, any update?

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117620): https://edk2.groups.io/g/devel/message/117620
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-04-11  8:12                   ` Gerd Hoffmann
@ 2024-04-15  1:04                     ` Min Xu
  0 siblings, 0 replies; 30+ messages in thread
From: Min Xu @ 2024-04-15  1:04 UTC (permalink / raw)
  To: Gerd Hoffmann, devel@edk2.groups.io, corvink@freebsd.org
  Cc: lersek@redhat.com, Michael Roth, Oliver Steffen, Yao, Jiewen,
	Tom Lendacky, Ard Biesheuvel, Aktas, Erdem, Sun, Yi Y,
	Huang, Jiaqing, Sun, CepingX, Xu, Min M

On Thursday, April 11, 2024 4:13 PM, Gerd Hoffmann wrote:
> 
> On my end the state of affairs is unchanged.  Our builds have the patch
> included and there are zero problems so far, the issue reported by Min
> doesn't reproduce and it is still unclear what is going on.
> 
> Min, any update?
> 
Hi, Gerd & Corvin
We're investigating this issue and will update the status in the community. Thanks for your patience. 

Thanks
Min


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117725): https://edk2.groups.io/g/devel/message/117725
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-01-30 13:04 ` [edk2-devel] [PATCH v3 1/4] " Gerd Hoffmann
  2024-01-30 19:22   ` Laszlo Ersek
@ 2024-05-22  8:59   ` Corvin Köhne
  2024-05-30  9:03     ` Gerd Hoffmann
  1 sibling, 1 reply; 30+ messages in thread
From: Corvin Köhne @ 2024-05-22  8:59 UTC (permalink / raw)
  To: devel, kraxel
  Cc: Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky,
	Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

[-- Attachment #1: Type: text/plain, Size: 6733 bytes --]

On Tue, 2024-01-30 at 14:04 +0100, Gerd Hoffmann wrote:
> Specifically before running lzma uncompress of the main firmware
> volume.
> This is needed to make sure caching is enabled, otherwise the
> uncompress
> can be extremely slow.
> 
> Adapt the ASSERTs and MTRR setup in PlatformInitLib to the changes.
> 
> Background:  Depending on virtual machine configuration kvm may uses
> EPT
> memory types to apply guest MTRR settings.  In case MTRRs are
> disabled
> kvm will use the uncachable memory type for all mappings.  The
> vmx_get_mt_mask() function in the linux kernel handles this and can
> be
> found here:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/kvm/vmx/vmx.c?h=v6.7.1#n7580
> 
> In most VM configurations kvm uses MTRR_TYPE_WRBACK unconditionally. 
> In
> case the VM has a mdev device assigned that is not the case though.
> 
> Before commit e8aa4c6546ad ("UefiCpuPkg/ResetVector: Cache Disable
> should not be set by default in CR0") kvm also ended up using
> MTRR_TYPE_WRBACK due to KVM_X86_QUIRK_CD_NW_CLEARED.  After that
> commit
> kvm evaluates guest mtrr settings, which why setting up MTRRs early
> is
> important now.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  OvmfPkg/IntelTdx/Sec/SecMain.c              | 32
> +++++++++++++++++++++
>  OvmfPkg/Library/PlatformInitLib/MemDetect.c | 10 +++----
>  OvmfPkg/Sec/SecMain.c                       | 32
> +++++++++++++++++++++
>  3 files changed, 69 insertions(+), 5 deletions(-)
> 
> diff --git a/OvmfPkg/IntelTdx/Sec/SecMain.c
> b/OvmfPkg/IntelTdx/Sec/SecMain.c
> index 42a587adfa57..a218ca17a01a 100644
> --- a/OvmfPkg/IntelTdx/Sec/SecMain.c
> +++ b/OvmfPkg/IntelTdx/Sec/SecMain.c
> @@ -27,6 +27,8 @@
>  #include <Library/TdxHelperLib.h>
>  #include <Library/CcProbeLib.h>
>  #include <Library/PeilessStartupLib.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> +#include <Register/Intel/Cpuid.h>
>  
>  #define SEC_IDT_ENTRY_COUNT  34
>  
> @@ -48,6 +50,31 @@ IA32_IDT_GATE_DESCRIPTOR  mIdtEntryTemplate = {
>    }
>  };
>  
> +//
> +// Enable MTRR early, set default type to write back.
> +// Needed to make sure caching is enabled,
> +// without this lzma decompress can be very slow.
> +//
> +STATIC
> +VOID
> +SecMtrrSetup (
> +  VOID
> +  )
> +{
> +  CPUID_VERSION_INFO_EDX           Edx;
> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> +
> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
> +  if (!Edx.Bits.MTRR) {
> +    return;
> +  }
> +
> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> +  DefType.Bits.Type = 6; /* write back */
> +  DefType.Bits.E    = 1; /* enable */
> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
> +}
> +
>  VOID
>  EFIAPI
>  SecCoreStartupWithStack (
> @@ -204,6 +231,11 @@ SecCoreStartupWithStack (
>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
>    DisableApicTimerInterrupt ();
>  
> +  //
> +  // Initialize MTRR
> +  //
> +  SecMtrrSetup ();
> +
>    PeilessStartup (&SecCoreData);
>  
>    ASSERT (FALSE);
> diff --git a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> index f042517bb64a..e89f63eee054 100644
> --- a/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> +++ b/OvmfPkg/Library/PlatformInitLib/MemDetect.c
> @@ -1082,18 +1082,18 @@ PlatformQemuInitializeRam (
>      MtrrGetAllMtrrs (&MtrrSettings);
>  
>      //
> -    // MTRRs disabled, fixed MTRRs disabled, default type is
> uncached
> +    // See SecMtrrSetup(), default type should be write back
>      //
> -    ASSERT ((MtrrSettings.MtrrDefType & BIT11) == 0);
> +    ASSERT ((MtrrSettings.MtrrDefType & BIT11) != 0);
>      ASSERT ((MtrrSettings.MtrrDefType & BIT10) == 0);
> -    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) == 0);
> +    ASSERT ((MtrrSettings.MtrrDefType & 0xFF) ==
> MTRR_CACHE_WRITE_BACK);
>  
>      //
>      // flip default type to writeback
>      //
> -    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, 0x06);
> +    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed,
> MTRR_CACHE_WRITE_BACK);
>      ZeroMem (&MtrrSettings.Variables, sizeof
> MtrrSettings.Variables);
> -    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
> +    MtrrSettings.MtrrDefType |= BIT10;
>      MtrrSetAllMtrrs (&MtrrSettings);
>  
>      //

This has to be changed for OvmfPkg/Bhyve/PlatformPei/MemDetect.c too.

> diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c
> index 31da5d0ace51..46c54f2984ff 100644
> --- a/OvmfPkg/Sec/SecMain.c
> +++ b/OvmfPkg/Sec/SecMain.c
> @@ -30,6 +30,8 @@
>  #include <Ppi/MpInitLibDep.h>
>  #include <Library/TdxHelperLib.h>
>  #include <Library/CcProbeLib.h>
> +#include <Register/Intel/ArchitecturalMsr.h>
> +#include <Register/Intel/Cpuid.h>
>  #include "AmdSev.h"
>  
>  #define SEC_IDT_ENTRY_COUNT  34
> @@ -744,6 +746,31 @@ FindAndReportEntryPoints (
>    return;
>  }
>  
> +//
> +// Enable MTRR early, set default type to write back.
> +// Needed to make sure caching is enabled,
> +// without this lzma decompress can be very slow.
> +//
> +STATIC
> +VOID
> +SecMtrrSetup (
> +  VOID
> +  )
> +{
> +  CPUID_VERSION_INFO_EDX           Edx;
> +  MSR_IA32_MTRR_DEF_TYPE_REGISTER  DefType;
> +
> +  AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &Edx.Uint32);
> +  if (!Edx.Bits.MTRR) {
> +    return;
> +  }
> +
> +  DefType.Uint64    = AsmReadMsr64 (MSR_IA32_MTRR_DEF_TYPE);
> +  DefType.Bits.Type = 6; /* write back */
> +  DefType.Bits.E    = 1; /* enable */
> +  AsmWriteMsr64 (MSR_IA32_MTRR_DEF_TYPE, DefType.Uint64);
> +}
> +
>  VOID
>  EFIAPI
>  SecCoreStartupWithStack (
> @@ -942,6 +969,11 @@ SecCoreStartupWithStack (
>    InitializeApicTimer (0, MAX_UINT32, TRUE, 5);
>    DisableApicTimerInterrupt ();
>  
> +  //
> +  // Initialize MTRR
> +  //
> +  SecMtrrSetup ();
> +
>    //
>    // Initialize Debug Agent to support source level debug in SEC/PEI
> phases before memory ready.
>    //

-- 
Kind regards,
Corvin


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119114): https://edk2.groups.io/g/devel/message/119114
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-05-22  8:59   ` Corvin Köhne
@ 2024-05-30  9:03     ` Gerd Hoffmann
  2024-06-03  7:13       ` Corvin Köhne
  0 siblings, 1 reply; 30+ messages in thread
From: Gerd Hoffmann @ 2024-05-30  9:03 UTC (permalink / raw)
  To: Corvin Köhne
  Cc: devel, Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky,
	Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

  Hi,

> > -    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed, 0x06);
> > +    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed,
> > MTRR_CACHE_WRITE_BACK);
> >      ZeroMem (&MtrrSettings.Variables, sizeof
> > MtrrSettings.Variables);
> > -    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
> > +    MtrrSettings.MtrrDefType |= BIT10;
> >      MtrrSetAllMtrrs (&MtrrSettings);
> >  
> >      //
> 
> This has to be changed for OvmfPkg/Bhyve/PlatformPei/MemDetect.c too.

I have a draft PR open with this fixed:
	https://github.com/tianocore/edk2/pull/5696

Can you check this works for bhyve?

thanks,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119383): https://edk2.groups.io/g/devel/message/119383
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-05-30  9:03     ` Gerd Hoffmann
@ 2024-06-03  7:13       ` Corvin Köhne
  2024-06-03 10:38         ` Gerd Hoffmann
  0 siblings, 1 reply; 30+ messages in thread
From: Corvin Köhne @ 2024-06-03  7:13 UTC (permalink / raw)
  To: Gerd Hoffmann
  Cc: devel, Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky,
	Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

[-- Attachment #1: Type: text/plain, Size: 1207 bytes --]

On Thu, 2024-05-30 at 11:03 +0200, Gerd Hoffmann wrote:
>   Hi,
> 
> > > -    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed,
> > > 0x06);
> > > +    SetMem (&MtrrSettings.Fixed, sizeof MtrrSettings.Fixed,
> > > MTRR_CACHE_WRITE_BACK);
> > >      ZeroMem (&MtrrSettings.Variables, sizeof
> > > MtrrSettings.Variables);
> > > -    MtrrSettings.MtrrDefType |= BIT11 | BIT10 | 6;
> > > +    MtrrSettings.MtrrDefType |= BIT10;
> > >      MtrrSetAllMtrrs (&MtrrSettings);
> > >  
> > >      //
> > 
> > This has to be changed for OvmfPkg/Bhyve/PlatformPei/MemDetect.c
> > too.
> 
> I have a draft PR open with this fixed:
> 	https://github.com/tianocore/edk2/pull/5696
> 
> Can you check this works for bhyve?
> 
> thanks,
>   Gerd
> 

Works. Thanks!


-- 
Kind regards,
Corvin


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119423): https://edk2.groups.io/g/devel/message/119423
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* Re: [edk2-devel] [PATCH v3 1/4] OvmfPkg/Sec: Setup MTRR early in the boot process.
  2024-06-03  7:13       ` Corvin Köhne
@ 2024-06-03 10:38         ` Gerd Hoffmann
  0 siblings, 0 replies; 30+ messages in thread
From: Gerd Hoffmann @ 2024-06-03 10:38 UTC (permalink / raw)
  To: Corvin Köhne
  Cc: devel, Michael Roth, Oliver Steffen, Jiewen Yao, Tom Lendacky,
	Laszlo Ersek, Min Xu, Ard Biesheuvel, Erdem Aktas

  Hi,

> > I have a draft PR open with this fixed:
> > 	https://github.com/tianocore/edk2/pull/5696
> > 
> > Can you check this works for bhyve?
> 
> Works. Thanks!

Thanks for testing, flipped PR to 'Ready'.

take care,
  Gerd



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119425): https://edk2.groups.io/g/devel/message/119425
Mute This Topic: https://groups.io/mt/104052591/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2024-06-03 10:39 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-30 13:04 [edk2-devel] [PATCH v3 0/4] OvmfPkg/Sec: Setup MTRR early in the boot process Gerd Hoffmann
2024-01-30 13:04 ` [edk2-devel] [PATCH v3 1/4] " Gerd Hoffmann
2024-01-30 19:22   ` Laszlo Ersek
2024-01-31 12:06     ` Laszlo Ersek
2024-02-01  5:20       ` Min Xu
2024-02-01  6:10         ` Sun, Yi Y
2024-02-01  9:43           ` Gerd Hoffmann
2024-02-01  9:49             ` Sun, Yi Y
2024-02-01  9:38         ` Gerd Hoffmann
2024-02-12 15:22           ` Gerd Hoffmann
2024-02-20  6:27             ` Min Xu
2024-02-20  8:15               ` Gerd Hoffmann
2024-04-11  6:56                 ` Corvin Köhne
2024-04-11  8:12                   ` Gerd Hoffmann
2024-04-15  1:04                     ` Min Xu
2024-05-22  8:59   ` Corvin Köhne
2024-05-30  9:03     ` Gerd Hoffmann
2024-06-03  7:13       ` Corvin Köhne
2024-06-03 10:38         ` Gerd Hoffmann
2024-01-30 13:04 ` [edk2-devel] [PATCH v3 2/4] MdePkg/ArchitecturalMsr.h: add #defines for MTRR cache types Gerd Hoffmann
2024-01-30 17:49   ` Michael D Kinney
2024-01-30 19:23   ` Laszlo Ersek
2024-01-30 19:28   ` Laszlo Ersek
2024-01-30 13:04 ` [edk2-devel] [PATCH v3 3/4] UefiCpuPkg/MtrrLib.h: use cache type #defines from ArchitecturalMsr.h Gerd Hoffmann
2024-01-30 17:49   ` Michael D Kinney
2024-01-30 19:24   ` Laszlo Ersek
2024-01-30 19:26   ` Laszlo Ersek
2024-01-30 19:29   ` Laszlo Ersek
2024-01-30 13:04 ` [edk2-devel] [PATCH v3 4/4] OvmfPkg/Sec: " Gerd Hoffmann
2024-01-30 19:25   ` Laszlo Ersek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox