public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
@ 2023-10-27  5:42 duntan
  2023-10-27  5:42 ` [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance duntan
                   ` (7 more replies)
  0 siblings, 8 replies; 27+ messages in thread
From: duntan @ 2023-10-27  5:42 UTC (permalink / raw)
  To: devel

The goal is to have single BaseIoLibIntrinsic instance that can also used for sev and Tdx. 
In this patch set, string I/O instructions are deleted in IoRead/WriteFifo API.
Then change the source file of BaseIoLibIntrinsic to also support Tdx and sev feature. So BaseIoLibIntrinsicSev and related assembly code can be removed.

Dun Tan (7):
  MdePkg: Create TdxLibNull.inf instance
  MdePkg: Add CcProbeLibNull and TdxLibNull implement
  MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
  MdePkg:support Tdx and sev in BaseIoLibIntrinsic
  OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
  OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
  MdePkg:remove BaseIoLibIntrinsicSev related code

 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14 ++++++++++----
 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61 -------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 -----------------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45 +++++++++++++++++++++++++++++++++++++--------
 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 ------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21 +++++++++++++++++++++
 MdePkg/MdeLibs.dsc.inc                                      |   4 +++-
 MdePkg/MdePkg.dsc                                           |   2 +-
 OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
 OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
 OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
 OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
 OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
 OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
 OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
 OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
 OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
 OvmfPkg/OvmfXen.dsc                                         |   2 +-
 21 files changed, 83 insertions(+), 1077 deletions(-)
 delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
 delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
 delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
 delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
 delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
 delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
 create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf

-- 
2.31.1.windows.1



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



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

* [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
@ 2023-10-27  5:42 ` duntan
  2023-10-27  5:54   ` Ni, Ray
  2023-10-27  5:42 ` [edk2-devel] [PATCH 2/7] MdePkg: Add CcProbeLibNull and TdxLibNull implement duntan
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-10-27  5:42 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Ray Ni

Create null instance for TdxLib. The IoLib instance
BaseIoLibIntrinsic.inf will consume the TdxLibNull
to pass build.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 MdePkg/Library/TdxLib/TdxLibNull.inf | 21 +++++++++++++++++++++
 MdePkg/MdePkg.dsc                    |  1 +
 2 files changed, 22 insertions(+)

diff --git a/MdePkg/Library/TdxLib/TdxLibNull.inf b/MdePkg/Library/TdxLib/TdxLibNull.inf
new file mode 100644
index 0000000000..ecf20e12e1
--- /dev/null
+++ b/MdePkg/Library/TdxLib/TdxLibNull.inf
@@ -0,0 +1,21 @@
+## @file
+# Tdx null instance.
+#
+#  Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = TdxLibNull
+  FILE_GUID                      = AA75759C-24E0-42FE-B5A4-83678548FCEF
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = TdxLib
+
+[Sources]
+  TdxLibNull.c
+
+[Packages]
+  MdePkg/MdePkg.dec
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
index 3abd1a1e23..a1be123d80 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -184,6 +184,7 @@
   MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf
   MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
   MdePkg/Library/TdxLib/TdxLib.inf
+  MdePkg/Library/TdxLib/TdxLibNull.inf
   MdePkg/Library/MipiSysTLib/MipiSysTLib.inf
   MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.inf
 
-- 
2.31.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110182): https://edk2.groups.io/g/devel/message/110182
Mute This Topic: https://groups.io/mt/102215662/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] 27+ messages in thread

* [edk2-devel] [PATCH 2/7] MdePkg: Add CcProbeLibNull and TdxLibNull implement
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
  2023-10-27  5:42 ` [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance duntan
@ 2023-10-27  5:42 ` duntan
  2023-10-27  5:42 ` [edk2-devel] [PATCH 3/7] MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c duntan
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 27+ messages in thread
From: duntan @ 2023-10-27  5:42 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Ray Ni

Add CcProbeLibNull and TdxLibNull implement in the
MdeLibs.dsc.inc. The IoLib instance BaseIoLibIntrinsic
will consume the two lib instance in the following
patch. Add the two null instance in this file to avoid
build failure.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 MdePkg/MdeLibs.dsc.inc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/MdePkg/MdeLibs.dsc.inc b/MdePkg/MdeLibs.dsc.inc
index 4580481cb5..0525283cfd 100644
--- a/MdePkg/MdeLibs.dsc.inc
+++ b/MdePkg/MdeLibs.dsc.inc
@@ -5,7 +5,7 @@
 # by using "!include MdePkg/MdeLibs.dsc.inc" to specify the library instances
 # of some EDKII basic/common library classes.
 #
-# Copyright (c) 2021 - 2022, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2021 - 2023, Intel Corporation. All rights reserved.<BR>
 #
 #    SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -16,3 +16,5 @@
   RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
   CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
   SmmCpuRendezvousLib|MdePkg/Library/SmmCpuRendezvousLibNull/SmmCpuRendezvousLibNull.inf
+  CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
+  TdxLib|MdePkg/Library/TdxLib/TdxLibNull.inf
-- 
2.31.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110183): https://edk2.groups.io/g/devel/message/110183
Mute This Topic: https://groups.io/mt/102215663/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] 27+ messages in thread

* [edk2-devel] [PATCH 3/7] MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
  2023-10-27  5:42 ` [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance duntan
  2023-10-27  5:42 ` [edk2-devel] [PATCH 2/7] MdePkg: Add CcProbeLibNull and TdxLibNull implement duntan
@ 2023-10-27  5:42 ` duntan
  2023-10-27  5:42 ` [edk2-devel] [PATCH 4/7] MdePkg:support Tdx and sev in BaseIoLibIntrinsic duntan
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 27+ messages in thread
From: duntan @ 2023-10-27  5:42 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Ray Ni

Simplify IoRead/WriteFifo implement in IoLibFifo.c
by repeatedly calling IoRead/Write API in C code.
This can avoid calling assembly code to use string
I/O instructions and avoid checking if sev feature
is enabled. Then the code flow is simplified.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c | 44 +++++++++++++++++++++++++++++++++++++-------
 1 file changed, 37 insertions(+), 7 deletions(-)

diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c
index 9a94bc6a05..adce1040f6 100644
--- a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c
+++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c
@@ -1,7 +1,7 @@
 /** @file
   IoFifo read/write routines.
 
-  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2021-2023, Intel Corporation. All rights reserved.<BR>
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -39,10 +39,15 @@ IoReadFifo8 (
   OUT     VOID   *Buffer
   )
 {
+  UINT8  *Buffer8;
+
   if (IsTdxGuest ()) {
     TdIoReadFifo8 (Port, Count, Buffer);
   } else {
-    SevIoReadFifo8 (Port, Count, Buffer);
+    Buffer8 = (UINT8 *)Buffer;
+    while (Count-- > 0) {
+      *Buffer8++ = IoRead8 (Port);
+    }
   }
 }
 
@@ -73,10 +78,15 @@ IoWriteFifo8 (
   IN      VOID   *Buffer
   )
 {
+  UINT8  *Buffer8;
+
   if (IsTdxGuest ()) {
     TdIoWriteFifo8 (Port, Count, Buffer);
   } else {
-    SevIoWriteFifo8 (Port, Count, Buffer);
+    Buffer8 = (UINT8 *)Buffer;
+    while (Count-- > 0) {
+      IoWrite8 (Port, *Buffer8++);
+    }
   }
 }
 
@@ -107,10 +117,15 @@ IoReadFifo16 (
   OUT     VOID   *Buffer
   )
 {
+  UINT16  *Buffer16;
+
   if (IsTdxGuest ()) {
     TdIoReadFifo16 (Port, Count, Buffer);
   } else {
-    SevIoReadFifo16 (Port, Count, Buffer);
+    Buffer16 = (UINT16 *)Buffer;
+    while (Count-- > 0) {
+      *Buffer16++ = IoRead16 (Port);
+    }
   }
 }
 
@@ -141,10 +156,15 @@ IoWriteFifo16 (
   IN      VOID   *Buffer
   )
 {
+  UINT16  *Buffer16;
+
   if (IsTdxGuest ()) {
     TdIoWriteFifo16 (Port, Count, Buffer);
   } else {
-    SevIoWriteFifo16 (Port, Count, Buffer);
+    Buffer16 = (UINT16 *)Buffer;
+    while (Count-- > 0) {
+      IoWrite16 (Port, *Buffer16++);
+    }
   }
 }
 
@@ -175,10 +195,15 @@ IoReadFifo32 (
   OUT     VOID   *Buffer
   )
 {
+  UINT32  *Buffer32;
+
   if (IsTdxGuest ()) {
     TdIoReadFifo32 (Port, Count, Buffer);
   } else {
-    SevIoReadFifo32 (Port, Count, Buffer);
+    Buffer32 = (UINT32 *)Buffer;
+    while (Count-- > 0) {
+      *Buffer32++ = IoRead32 (Port);
+    }
   }
 }
 
@@ -209,9 +234,14 @@ IoWriteFifo32 (
   IN      VOID   *Buffer
   )
 {
+  UINT32  *Buffer32;
+
   if (IsTdxGuest ()) {
     TdIoWriteFifo32 (Port, Count, Buffer);
   } else {
-    SevIoWriteFifo32 (Port, Count, Buffer);
+    Buffer32 = (UINT32 *)Buffer;
+    while (Count-- > 0) {
+      IoWrite32 (Port, *Buffer32++);
+    }
   }
 }
-- 
2.31.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110184): https://edk2.groups.io/g/devel/message/110184
Mute This Topic: https://groups.io/mt/102215664/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] 27+ messages in thread

* [edk2-devel] [PATCH 4/7] MdePkg:support Tdx and sev in BaseIoLibIntrinsic
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
                   ` (2 preceding siblings ...)
  2023-10-27  5:42 ` [edk2-devel] [PATCH 3/7] MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c duntan
@ 2023-10-27  5:42 ` duntan
  2023-10-27  5:42 ` [edk2-devel] [PATCH 5/7] OvmfPkg: Add CcProbeLib in PlatformInitLib.inf duntan
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 27+ messages in thread
From: duntan @ 2023-10-27  5:42 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Ray Ni

Change IA32 and X64 arch source files for
BaseIoLibIntrinsic to support Tdx and sev.
Use IoFifoRead/Write API in IoLibFifo.c and the
IoLibInternalTdx.c instead of IoFifoSev.nasm for
BaseIoLibIntrinsic.
With this change, BaseIoLibIntrinsic can also support
Tdx guest and sev. Then the assembly code and instance
for BaseIoLibIntrinsicSev can be removed.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
index aeb072ee95..e1a2e1eed8 100644
--- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
+++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
@@ -7,7 +7,7 @@
 #  ASSERT(). For ARM, AARCH64, RISCV64 and LoongArch, this I/O library only provides
 #  non I/O read and write.
 #
-#  Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2007 - 2023, Intel Corporation. All rights reserved.<BR>
 #  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
 #  Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
 #  Portions Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
@@ -35,24 +35,26 @@
   IoLibMmioBuffer.c
   BaseIoLibIntrinsicInternal.h
   IoHighLevel.c
-  IoLibInternalTdxNull.c
   IoLibTdx.h
 
 [Sources.IA32]
   IoLibGcc.c    | GCC
   IoLibMsc.c    | MSFT
   IoLib.c
-  Ia32/IoFifo.nasm
+  IoLibFifo.c
+  IoLibInternalTdxNull.c
 
 [Sources.X64]
   IoLibGcc.c    | GCC
   IoLibMsc.c    | MSFT
   IoLib.c
-  X64/IoFifo.nasm
+  IoLibFifo.c
+  IoLibInternalTdx.c
 
 [Sources.EBC]
   IoLibEbc.c
   IoLib.c
+  IoLibInternalTdxNull.c
 
 [Sources.ARM]
   IoLibNoIo.c
@@ -74,3 +76,7 @@
   BaseLib
   RegisterFilterLib
 
+[LibraryClasses.X64]
+  TdxLib
+  CcProbeLib
+
-- 
2.31.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110185): https://edk2.groups.io/g/devel/message/110185
Mute This Topic: https://groups.io/mt/102215665/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] 27+ messages in thread

* [edk2-devel] [PATCH 5/7] OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
                   ` (3 preceding siblings ...)
  2023-10-27  5:42 ` [edk2-devel] [PATCH 4/7] MdePkg:support Tdx and sev in BaseIoLibIntrinsic duntan
@ 2023-10-27  5:42 ` duntan
  2023-10-30 14:37   ` Ard Biesheuvel
  2023-10-27  5:42 ` [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files duntan
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-10-27  5:42 UTC (permalink / raw)
  To: devel; +Cc: Ard Biesheuvel, Jiewen Yao, Jordan Justen, Gerd Hoffmann, Ray Ni

PlatformInitLib uses the CcProbe API in MemDetect.c
but doensn't add CcProbeLib in .inf LibraryClasses
section. Add CcProbeLib to fix the build error.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf
index 5a79d95b68..8ff9e699b1 100644
--- a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf
+++ b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf
@@ -2,7 +2,7 @@
 #  Platform Initialization Lib
 #
 #  This module provides platform specific function to detect boot mode.
-#  Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2006 - 2023, Intel Corporation. All rights reserved.<BR>
 #
 #  SPDX-License-Identifier: BSD-2-Clause-Patent
 #
@@ -52,6 +52,7 @@
   PcdLib
   PciLib
   PeiHardwareInfoLib
+  CcProbeLib
 
 [LibraryClasses.X64]
   TdxLib
-- 
2.31.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110186): https://edk2.groups.io/g/devel/message/110186
Mute This Topic: https://groups.io/mt/102215667/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] 27+ messages in thread

* [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
                   ` (4 preceding siblings ...)
  2023-10-27  5:42 ` [edk2-devel] [PATCH 5/7] OvmfPkg: Add CcProbeLib in PlatformInitLib.inf duntan
@ 2023-10-27  5:42 ` duntan
  2023-10-30 14:36   ` Ard Biesheuvel
  2023-10-27  5:43 ` [edk2-devel] [PATCH 7/7] MdePkg:remove BaseIoLibIntrinsicSev related code duntan
  2023-10-27  5:49 ` [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev Yao, Jiewen
  7 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-10-27  5:42 UTC (permalink / raw)
  To: devel; +Cc: Ard Biesheuvel, Jiewen Yao, Jordan Justen, Gerd Hoffmann, Ray Ni

Use BaseIoLibIntrinsic.inf in dsc files. The
BaseIoLibIntrinsic supports Tdx and sev now.
The BaseIoLibIntrinsicSev will be removed in
the following patches.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 OvmfPkg/AmdSev/AmdSevX64.dsc     | 2 +-
 OvmfPkg/Bhyve/BhyveX64.dsc       | 2 +-
 OvmfPkg/CloudHv/CloudHvX64.dsc   | 2 +-
 OvmfPkg/IntelTdx/IntelTdxX64.dsc | 2 +-
 OvmfPkg/Microvm/MicrovmX64.dsc   | 2 +-
 OvmfPkg/OvmfPkgIa32.dsc          | 2 +-
 OvmfPkg/OvmfPkgIa32X64.dsc       | 2 +-
 OvmfPkg/OvmfPkgX64.dsc           | 2 +-
 OvmfPkg/OvmfXen.dsc              | 2 +-
 9 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc
index 302c90e7c2..06086e0cc5 100644
--- a/OvmfPkg/AmdSev/AmdSevX64.dsc
+++ b/OvmfPkg/AmdSev/AmdSevX64.dsc
@@ -142,7 +142,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc
index 6693342c5f..1376dd7468 100644
--- a/OvmfPkg/Bhyve/BhyveX64.dsc
+++ b/OvmfPkg/Bhyve/BhyveX64.dsc
@@ -149,7 +149,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/CloudHv/CloudHvX64.dsc b/OvmfPkg/CloudHv/CloudHvX64.dsc
index 35942e02df..1d2a13dd92 100644
--- a/OvmfPkg/CloudHv/CloudHvX64.dsc
+++ b/OvmfPkg/CloudHv/CloudHvX64.dsc
@@ -159,7 +159,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.dsc b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
index 182ec3705d..6623196c8b 100644
--- a/OvmfPkg/IntelTdx/IntelTdxX64.dsc
+++ b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
@@ -146,7 +146,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc
index 0f26f2a9a9..c76a135f9e 100644
--- a/OvmfPkg/Microvm/MicrovmX64.dsc
+++ b/OvmfPkg/Microvm/MicrovmX64.dsc
@@ -157,7 +157,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
index fcd3a3fda5..a850465e77 100644
--- a/OvmfPkg/OvmfPkgIa32.dsc
+++ b/OvmfPkg/OvmfPkgIa32.dsc
@@ -162,7 +162,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index d0ae0b996d..9c6615b487 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -167,7 +167,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index a6811eee55..9e054aa489 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -179,7 +179,7 @@
   PciCapLib|OvmfPkg/Library/BasePciCapLib/BasePciCapLib.inf
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc
index ccd3a873c7..ab4bdb2628 100644
--- a/OvmfPkg/OvmfXen.dsc
+++ b/OvmfPkg/OvmfXen.dsc
@@ -150,7 +150,7 @@
   PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
   PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
   CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
-  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
   OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
   SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
   MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
-- 
2.31.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110187): https://edk2.groups.io/g/devel/message/110187
Mute This Topic: https://groups.io/mt/102215668/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] 27+ messages in thread

* [edk2-devel] [PATCH 7/7] MdePkg:remove BaseIoLibIntrinsicSev related code
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
                   ` (5 preceding siblings ...)
  2023-10-27  5:42 ` [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files duntan
@ 2023-10-27  5:43 ` duntan
  2023-10-27  5:49 ` [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev Yao, Jiewen
  7 siblings, 0 replies; 27+ messages in thread
From: duntan @ 2023-10-27  5:43 UTC (permalink / raw)
  To: devel; +Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Ray Ni

Remove BaseIoLibIntrinsicSev related code in MdePkg.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61 -------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 -----------------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |   1 -
 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 ------------------------------------------------------------------------------------------------------------------------
 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 MdePkg/MdePkg.dsc                                           |   1 -
 8 files changed, 1055 deletions(-)

diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
deleted file mode 100644
index e1b8298ac4..0000000000
--- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
+++ /dev/null
@@ -1,61 +0,0 @@
-## @file
-#  Instance of I/O Library using compiler intrinsics.
-#
-#  I/O Library that uses compiler intrinsics to perform IN and OUT instructions
-#  for IA-32 and x64.
-#
-#  Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>
-#  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
-#  Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
-#
-#  SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = BaseIoLibIntrinsicSev
-  MODULE_UNI_FILE                = BaseIoLibIntrinsic.uni
-  FILE_GUID                      = 93742f95-6e71-4581-b600-8e1da443f95a
-  MODULE_TYPE                    = BASE
-  VERSION_STRING                 = 1.0
-  LIBRARY_CLASS                  = IoLib
-
-
-#
-#  VALID_ARCHITECTURES           = IA32 X64
-#
-
-[Sources]
-  IoLibMmioBuffer.c
-  BaseIoLibIntrinsicInternal.h
-  IoHighLevel.c
-  IoLibTdx.h
-  IoLibSev.h
-
-[Sources.IA32]
-  IoLibGcc.c    | GCC
-  IoLibMsc.c    | MSFT
-  IoLib.c
-  IoLibInternalTdxNull.c
-  Ia32/IoFifoSev.nasm
-
-[Sources.X64]
-  IoLibGcc.c    | GCC
-  IoLibMsc.c    | MSFT
-  IoLib.c
-  IoLibInternalTdx.c
-  IoLibFifo.c
-  X64/IoFifoSev.nasm
-
-[Packages]
-  MdePkg/MdePkg.dec
-
-[LibraryClasses]
-  DebugLib
-  BaseLib
-  RegisterFilterLib
-  CcProbeLib
-
-[LibraryClasses.X64]
-  TdxLib
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
deleted file mode 100644
index a4ae1a0053..0000000000
--- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
+++ /dev/null
@@ -1,131 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
-; Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
-;
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-;------------------------------------------------------------------------------
-
-    SECTION .text
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo8 (
-;    IN  UINTN                 Port,
-;    IN  UINTN                 Size,
-;    OUT VOID                  *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo8)
-ASM_PFX(IoReadFifo8):
-    push    edi
-    cld
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     edi, [esp + 16]
-rep insb
-    pop     edi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo16 (
-;    IN  UINTN                 Port,
-;    IN  UINTN                 Size,
-;    OUT VOID                  *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo16)
-ASM_PFX(IoReadFifo16):
-    push    edi
-    cld
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     edi, [esp + 16]
-rep insw
-    pop     edi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo32 (
-;    IN  UINTN                 Port,
-;    IN  UINTN                 Size,
-;    OUT VOID                  *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo32)
-ASM_PFX(IoReadFifo32):
-    push    edi
-    cld
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     edi, [esp + 16]
-rep insd
-    pop     edi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo8 (
-;    IN UINTN                  Port,
-;    IN UINTN                  Size,
-;    IN VOID                   *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo8)
-ASM_PFX(IoWriteFifo8):
-    push    esi
-    cld
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     esi, [esp + 16]
-rep outsb
-    pop     esi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo16 (
-;    IN UINTN                  Port,
-;    IN UINTN                  Size,
-;    IN VOID                   *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo16)
-ASM_PFX(IoWriteFifo16):
-    push    esi
-    cld
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     esi, [esp + 16]
-rep outsw
-    pop     esi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo32 (
-;    IN UINTN                  Port,
-;    IN UINTN                  Size,
-;    IN VOID                   *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo32)
-ASM_PFX(IoWriteFifo32):
-    push    esi
-    cld
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     esi, [esp + 16]
-rep outsd
-    pop     esi
-    ret
-
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
deleted file mode 100644
index 63a4771d3c..0000000000
--- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
+++ /dev/null
@@ -1,293 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
-; Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
-;
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-;------------------------------------------------------------------------------
-
-    SECTION .text
-
-;------------------------------------------------------------------------------
-; Check whether we need to unroll the String I/O under SEV guest
-;
-; Return // eax   (1 - unroll, 0 - no unroll)
-;------------------------------------------------------------------------------
-global ASM_PFX(SevNoRepIo)
-ASM_PFX(SevNoRepIo):
-
-  ; CPUID clobbers ebx, ecx and edx
-  push      ebx
-  push      ecx
-  push      edx
-
-  ; Check if we are running under hypervisor
-  ; CPUID(1).ECX Bit 31
-  mov       eax, 1
-  cpuid
-  bt        ecx, 31
-  jnc       @UseRepIo
-
-  ; Check if we have Memory encryption CPUID leaf
-  mov       eax, 0x80000000
-  cpuid
-  cmp       eax, 0x8000001f
-  jl        @UseRepIo
-
-  ; Check for memory encryption feature:
-  ;  CPUID  Fn8000_001F[EAX] - Bit 1
-  ;
-  mov       eax,  0x8000001f
-  cpuid
-  bt        eax, 1
-  jnc       @UseRepIo
-
-  ; Check if memory encryption is enabled
-  ;  MSR_0xC0010131 - Bit 0 (SEV enabled)
-  ;  MSR_0xC0010131 - Bit 1 (SEV-ES enabled)
-  mov       ecx, 0xc0010131
-  rdmsr
-
-  ; Check for (SevEsEnabled == 0 && SevEnabled == 1)
-  and       eax, 3
-  cmp       eax, 1
-  je        @SevNoRepIo_Done
-
-@UseRepIo:
-  xor       eax, eax
-
-@SevNoRepIo_Done:
-  pop       edx
-  pop       ecx
-  pop       ebx
-  ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo8 (
-;    IN  UINTN                 Port,
-;    IN  UINTN                 Size,
-;    OUT VOID                  *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo8)
-ASM_PFX(IoReadFifo8):
-    push    edi
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     edi, [esp + 16]
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoReadFifo8_NoRep
-
-    cld
-    rep     insb
-    jmp     @IoReadFifo8_Done
-
-@IoReadFifo8_NoRep:
-    jecxz   @IoReadFifo8_Done
-
-@IoReadFifo8_Loop:
-    in      al, dx
-    mov     byte [edi], al
-    inc     edi
-    loop    @IoReadFifo8_Loop
-
-@IoReadFifo8_Done:
-    pop     edi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo16 (
-;    IN  UINTN                 Port,
-;    IN  UINTN                 Size,
-;    OUT VOID                  *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo16)
-ASM_PFX(IoReadFifo16):
-    push    edi
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     edi, [esp + 16]
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoReadFifo16_NoRep
-
-    cld
-    rep     insw
-    jmp     @IoReadFifo16_Done
-
-@IoReadFifo16_NoRep:
-    jecxz   @IoReadFifo16_Done
-
-@IoReadFifo16_Loop:
-    in      ax, dx
-    mov     word [edi], ax
-    add     edi, 2
-    loop    @IoReadFifo16_Loop
-
-@IoReadFifo16_Done:
-    pop     edi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo32 (
-;    IN  UINTN                 Port,
-;    IN  UINTN                 Size,
-;    OUT VOID                  *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo32)
-ASM_PFX(IoReadFifo32):
-    push    edi
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     edi, [esp + 16]
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoReadFifo32_NoRep
-
-    cld
-    rep     insd
-    jmp     @IoReadFifo32_Done
-
-@IoReadFifo32_NoRep:
-    jecxz   @IoReadFifo32_Done
-
-@IoReadFifo32_Loop:
-    in      eax, dx
-    mov     dword [edi], eax
-    add     edi, 4
-    loop    @IoReadFifo32_Loop
-
-@IoReadFifo32_Done:
-    pop     edi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo8 (
-;    IN UINTN                  Port,
-;    IN UINTN                  Size,
-;    IN VOID                   *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo8)
-ASM_PFX(IoWriteFifo8):
-    push    esi
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     esi, [esp + 16]
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoWriteFifo8_NoRep
-
-    cld
-    rep     outsb
-    jmp     @IoWriteFifo8_Done
-
-@IoWriteFifo8_NoRep:
-    jecxz   @IoWriteFifo8_Done
-
-@IoWriteFifo8_Loop:
-    mov     al, byte [esi]
-    out     dx, al
-    inc     esi
-    loop    @IoWriteFifo8_Loop
-
-@IoWriteFifo8_Done:
-    pop     esi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo16 (
-;    IN UINTN                  Port,
-;    IN UINTN                  Size,
-;    IN VOID                   *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo16)
-ASM_PFX(IoWriteFifo16):
-    push    esi
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     esi, [esp + 16]
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoWriteFifo16_NoRep
-
-    cld
-    rep     outsw
-    jmp     @IoWriteFifo16_Done
-
-@IoWriteFifo16_NoRep:
-    jecxz   @IoWriteFifo16_Done
-
-@IoWriteFifo16_Loop:
-    mov     ax, word [esi]
-    out     dx, ax
-    add     esi, 2
-    loop    @IoWriteFifo16_Loop
-
-@IoWriteFifo16_Done:
-    pop     esi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo32 (
-;    IN UINTN                  Port,
-;    IN UINTN                  Size,
-;    IN VOID                   *Buffer
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo32)
-ASM_PFX(IoWriteFifo32):
-    push    esi
-    mov     dx, [esp + 8]
-    mov     ecx, [esp + 12]
-    mov     esi, [esp + 16]
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoWriteFifo32_NoRep
-
-    cld
-    rep     outsd
-    jmp     @IoWriteFifo32_Done
-
-@IoWriteFifo32_NoRep:
-    jecxz   @IoWriteFifo32_Done
-
-@IoWriteFifo32_Loop:
-    mov     eax, dword [esi]
-    out     dx, eax
-    add     esi, 4
-    loop    @IoWriteFifo32_Loop
-
-@IoWriteFifo32_Done:
-    pop     esi
-    ret
-
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c
index adce1040f6..91c0637c7d 100644
--- a/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c
+++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c
@@ -7,7 +7,6 @@
 **/
 
 #include "BaseIoLibIntrinsicInternal.h"
-#include "IoLibSev.h"
 #include "IoLibTdx.h"
 #include <Uefi/UefiBaseType.h>
 #include <Library/TdxLib.h>
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h b/MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
deleted file mode 100644
index 6d7cafcff2..0000000000
--- a/MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/** @file
-  Header file for SEV IO library.
-
-  Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
-   SPDX-License-Identifier: BSD-2-Clause-Patent
-**/
-
-#ifndef IOLIB_SEV_H_
-#define IOLIB_SEV_H_
-
-#include <Base.h>
-
-#include <Library/BaseLib.h>
-#include <Library/DebugLib.h>
-
-/**
-  Reads an 8-bit I/O port fifo into a block of memory.
-
-  Reads the 8-bit I/O fifo port specified by Port.
-  The port is read Count times, and the read data is
-  stored in the provided Buffer.
-
-  This function must guarantee that all I/O read and write operations are
-  serialized.
-
-  If 8-bit I/O port operations are not supported, then ASSERT().
-
-  @param  Port    The I/O port to read.
-  @param  Count   The number of times to read I/O port.
-  @param  Buffer  The buffer to store the read data into.
-
-**/
-VOID
-EFIAPI
-SevIoReadFifo8 (
-  IN      UINTN  Port,
-  IN      UINTN  Count,
-  OUT     VOID   *Buffer
-  );
-
-/**
-  Writes a block of memory into an 8-bit I/O port fifo.
-
-  Writes the 8-bit I/O fifo port specified by Port.
-  The port is written Count times, and the write data is
-  retrieved from the provided Buffer.
-
-  This function must guarantee that all I/O write and write operations are
-  serialized.
-
-  If 8-bit I/O port operations are not supported, then ASSERT().
-
-  @param  Port    The I/O port to write.
-  @param  Count   The number of times to write I/O port.
-  @param  Buffer  The buffer to retrieve the write data from.
-
-**/
-VOID
-EFIAPI
-SevIoWriteFifo8 (
-  IN      UINTN  Port,
-  IN      UINTN  Count,
-  IN      VOID   *Buffer
-  );
-
-/**
-  Reads an 8-bit I/O port fifo into a block of memory.
-
-  Reads the 8-bit I/O fifo port specified by Port.
-  The port is read Count times, and the read data is
-  stored in the provided Buffer.
-
-  This function must guarantee that all I/O read and write operations are
-  serialized.
-
-  If 8-bit I/O port operations are not supported, then ASSERT().
-
-  @param  Port    The I/O port to read.
-  @param  Count   The number of times to read I/O port.
-  @param  Buffer  The buffer to store the read data into.
-
-**/
-VOID
-EFIAPI
-SevIoReadFifo16 (
-  IN      UINTN  Port,
-  IN      UINTN  Count,
-  OUT     VOID   *Buffer
-  );
-
-/**
-  Writes a block of memory into an 8-bit I/O port fifo.
-
-  Writes the 8-bit I/O fifo port specified by Port.
-  The port is written Count times, and the write data is
-  retrieved from the provided Buffer.
-
-  This function must guarantee that all I/O write and write operations are
-  serialized.
-
-  If 8-bit I/O port operations are not supported, then ASSERT().
-
-  @param  Port    The I/O port to write.
-  @param  Count   The number of times to write I/O port.
-  @param  Buffer  The buffer to retrieve the write data from.
-
-**/
-VOID
-EFIAPI
-SevIoWriteFifo16 (
-  IN      UINTN  Port,
-  IN      UINTN  Count,
-  IN      VOID   *Buffer
-  );
-
-/**
-  Reads an 8-bit I/O port fifo into a block of memory.
-
-  Reads the 8-bit I/O fifo port specified by Port.
-  The port is read Count times, and the read data is
-  stored in the provided Buffer.
-
-  This function must guarantee that all I/O read and write operations are
-  serialized.
-
-  If 8-bit I/O port operations are not supported, then ASSERT().
-
-  @param  Port    The I/O port to read.
-  @param  Count   The number of times to read I/O port.
-  @param  Buffer  The buffer to store the read data into.
-
-**/
-VOID
-EFIAPI
-SevIoReadFifo32 (
-  IN      UINTN  Port,
-  IN      UINTN  Count,
-  OUT     VOID   *Buffer
-  );
-
-/**
-  Writes a block of memory into an 8-bit I/O port fifo.
-
-  Writes the 8-bit I/O fifo port specified by Port.
-  The port is written Count times, and the write data is
-  retrieved from the provided Buffer.
-
-  This function must guarantee that all I/O write and write operations are
-  serialized.
-
-  If 8-bit I/O port operations are not supported, then ASSERT().
-
-  @param  Port    The I/O port to write.
-  @param  Count   The number of times to write I/O port.
-  @param  Buffer  The buffer to retrieve the write data from.
-
-**/
-VOID
-EFIAPI
-SevIoWriteFifo32 (
-  IN      UINTN  Port,
-  IN      UINTN  Count,
-  IN      VOID   *Buffer
-  );
-
-#endif
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
deleted file mode 100644
index d459072f6e..0000000000
--- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
+++ /dev/null
@@ -1,120 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
-; Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
-;
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-;------------------------------------------------------------------------------
-
-    DEFAULT REL
-    SECTION .text
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo8 (
-;    IN  UINTN                 Port,              // rcx
-;    IN  UINTN                 Size,              // rdx
-;    OUT VOID                  *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo8)
-ASM_PFX(IoReadFifo8):
-    cld
-    xchg    rcx, rdx
-    xchg    rdi, r8             ; rdi: buffer address; r8: save rdi
-rep insb
-    mov     rdi, r8             ; restore rdi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo16 (
-;    IN  UINTN                 Port,              // rcx
-;    IN  UINTN                 Size,              // rdx
-;    OUT VOID                  *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo16)
-ASM_PFX(IoReadFifo16):
-    cld
-    xchg    rcx, rdx
-    xchg    rdi, r8             ; rdi: buffer address; r8: save rdi
-rep insw
-    mov     rdi, r8             ; restore rdi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoReadFifo32 (
-;    IN  UINTN                 Port,              // rcx
-;    IN  UINTN                 Size,              // rdx
-;    OUT VOID                  *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoReadFifo32)
-ASM_PFX(IoReadFifo32):
-    cld
-    xchg    rcx, rdx
-    xchg    rdi, r8             ; rdi: buffer address; r8: save rdi
-rep insd
-    mov     rdi, r8             ; restore rdi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo8 (
-;    IN UINTN                  Port,              // rcx
-;    IN UINTN                  Size,              // rdx
-;    IN VOID                   *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo8)
-ASM_PFX(IoWriteFifo8):
-    cld
-    xchg    rcx, rdx
-    xchg    rsi, r8             ; rsi: buffer address; r8: save rsi
-rep outsb
-    mov     rsi, r8             ; restore rsi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo16 (
-;    IN UINTN                  Port,              // rcx
-;    IN UINTN                  Size,              // rdx
-;    IN VOID                   *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo16)
-ASM_PFX(IoWriteFifo16):
-    cld
-    xchg    rcx, rdx
-    xchg    rsi, r8             ; rsi: buffer address; r8: save rsi
-rep outsw
-    mov     rsi, r8             ; restore rsi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo32 (
-;    IN UINTN                  Port,              // rcx
-;    IN UINTN                  Size,              // rdx
-;    IN VOID                   *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(IoWriteFifo32)
-ASM_PFX(IoWriteFifo32):
-    cld
-    xchg    rcx, rdx
-    xchg    rsi, r8             ; rsi: buffer address; r8: save rsi
-rep outsd
-    mov     rsi, r8             ; restore rsi
-    ret
-
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
deleted file mode 100644
index d02286b4d5..0000000000
--- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
+++ /dev/null
@@ -1,282 +0,0 @@
-;------------------------------------------------------------------------------
-;
-; Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
-; Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>
-;
-; SPDX-License-Identifier: BSD-2-Clause-Patent
-;
-;------------------------------------------------------------------------------
-
-    DEFAULT REL
-    SECTION .text
-
-;------------------------------------------------------------------------------
-; Check whether we need to unroll the String I/O in SEV guest
-;
-; Return // eax   (1 - unroll, 0 - no unroll)
-;------------------------------------------------------------------------------
-global ASM_PFX(SevNoRepIo)
-ASM_PFX(SevNoRepIo):
-
-  ; CPUID clobbers ebx, ecx and edx
-  push      rbx
-  push      rcx
-  push      rdx
-
-  ; Check if we are runing under hypervisor
-  ; CPUID(1).ECX Bit 31
-  mov       eax, 1
-  cpuid
-  bt        ecx, 31
-  jnc       @UseRepIo
-
-  ; Check if we have Memory encryption CPUID leaf
-  mov       eax, 0x80000000
-  cpuid
-  cmp       eax, 0x8000001f
-  jl        @UseRepIo
-
-  ; Check for memory encryption feature:
-  ;  CPUID  Fn8000_001F[EAX] - Bit 1
-  ;
-  mov       eax,  0x8000001f
-  cpuid
-  bt        eax, 1
-  jnc       @UseRepIo
-
-  ; Check if memory encryption is enabled
-  ;  MSR_0xC0010131 - Bit 0 (SEV enabled)
-  ;  MSR_0xC0010131 - Bit 1 (SEV-ES enabled)
-  mov       ecx, 0xc0010131
-  rdmsr
-
-  ; Check for (SevEsEnabled == 0 && SevEnabled == 1)
-  and       eax, 3
-  cmp       eax, 1
-  je        @SevNoRepIo_Done
-
-@UseRepIo:
-  xor       eax, eax
-
-@SevNoRepIo_Done:
-  pop       rdx
-  pop       rcx
-  pop       rbx
-  ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  SevIoReadFifo8 (
-;    IN  UINTN                 Port,              // rcx
-;    IN  UINTN                 Size,              // rdx
-;    OUT VOID                  *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(SevIoReadFifo8)
-ASM_PFX(SevIoReadFifo8):
-    xchg    rcx, rdx
-    xchg    rdi, r8             ; rdi: buffer address; r8: save rdi
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoReadFifo8_NoRep
-
-    cld
-    rep     insb
-    jmp     @IoReadFifo8_Done
-
-@IoReadFifo8_NoRep:
-    jrcxz   @IoReadFifo8_Done
-
-@IoReadFifo8_Loop:
-    in      al, dx
-    mov     byte [rdi], al
-    inc     rdi
-    loop    @IoReadFifo8_Loop
-
-@IoReadFifo8_Done:
-    mov     rdi, r8             ; restore rdi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  SevIoReadFifo16 (
-;    IN  UINTN                 Port,              // rcx
-;    IN  UINTN                 Size,              // rdx
-;    OUT VOID                  *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(SevIoReadFifo16)
-ASM_PFX(SevIoReadFifo16):
-    xchg    rcx, rdx
-    xchg    rdi, r8             ; rdi: buffer address; r8: save rdi
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoReadFifo16_NoRep
-
-    cld
-    rep     insw
-    jmp     @IoReadFifo16_Done
-
-@IoReadFifo16_NoRep:
-    jrcxz   @IoReadFifo16_Done
-
-@IoReadFifo16_Loop:
-    in      ax, dx
-    mov     word [rdi], ax
-    add     rdi, 2
-    loop    @IoReadFifo16_Loop
-
-@IoReadFifo16_Done:
-    mov     rdi, r8             ; restore rdi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  SevIoReadFifo32 (
-;    IN  UINTN                 Port,              // rcx
-;    IN  UINTN                 Size,              // rdx
-;    OUT VOID                  *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(SevIoReadFifo32)
-ASM_PFX(SevIoReadFifo32):
-    xchg    rcx, rdx
-    xchg    rdi, r8             ; rdi: buffer address; r8: save rdi
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoReadFifo32_NoRep
-
-    cld
-    rep     insd
-    jmp     @IoReadFifo32_Done
-
-@IoReadFifo32_NoRep:
-    jrcxz   @IoReadFifo32_Done
-
-@IoReadFifo32_Loop:
-    in      eax, dx
-    mov     dword [rdi], eax
-    add     rdi, 4
-    loop    @IoReadFifo32_Loop
-
-@IoReadFifo32_Done:
-    mov     rdi, r8             ; restore rdi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  IoWriteFifo8 (
-;    IN UINTN                  Port,              // rcx
-;    IN UINTN                  Size,              // rdx
-;    IN VOID                   *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(SevIoWriteFifo8)
-ASM_PFX(SevIoWriteFifo8):
-    xchg    rcx, rdx
-    xchg    rsi, r8             ; rsi: buffer address; r8: save rsi
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoWriteFifo8_NoRep
-
-    cld
-    rep     outsb
-    jmp     @IoWriteFifo8_Done
-
-@IoWriteFifo8_NoRep:
-    jrcxz   @IoWriteFifo8_Done
-
-@IoWriteFifo8_Loop:
-    mov     al, byte [rsi]
-    out     dx, al
-    inc     rsi
-    loop    @IoWriteFifo8_Loop
-
-@IoWriteFifo8_Done:
-    mov     rsi, r8             ; restore rsi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  SevIoWriteFifo16 (
-;    IN UINTN                  Port,              // rcx
-;    IN UINTN                  Size,              // rdx
-;    IN VOID                   *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(SevIoWriteFifo16)
-ASM_PFX(SevIoWriteFifo16):
-    xchg    rcx, rdx
-    xchg    rsi, r8             ; rsi: buffer address; r8: save rsi
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoWriteFifo16_NoRep
-
-    cld
-    rep     outsw
-    jmp     @IoWriteFifo16_Done
-
-@IoWriteFifo16_NoRep:
-    jrcxz   @IoWriteFifo16_Done
-
-@IoWriteFifo16_Loop:
-    mov     ax, word [rsi]
-    out     dx, ax
-    add     rsi, 2
-    loop    @IoWriteFifo16_Loop
-
-@IoWriteFifo16_Done:
-    mov     rsi, r8             ; restore rsi
-    ret
-
-;------------------------------------------------------------------------------
-;  VOID
-;  EFIAPI
-;  SevIoWriteFifo32 (
-;    IN UINTN                  Port,              // rcx
-;    IN UINTN                  Size,              // rdx
-;    IN VOID                   *Buffer            // r8
-;    );
-;------------------------------------------------------------------------------
-global ASM_PFX(SevIoWriteFifo32)
-ASM_PFX(SevIoWriteFifo32):
-    xchg    rcx, rdx
-    xchg    rsi, r8             ; rsi: buffer address; r8: save rsi
-
-    ; Check if we need to unroll String I/O
-    call    ASM_PFX(SevNoRepIo)
-    test    eax, eax
-    jnz     @IoWriteFifo32_NoRep
-
-    cld
-    rep     outsd
-    jmp     @IoWriteFifo32_Done
-
-@IoWriteFifo32_NoRep:
-    jrcxz   @IoWriteFifo32_Done
-
-@IoWriteFifo32_Loop:
-    mov     eax, dword [rsi]
-    out     dx, eax
-    add     rsi, 4
-    loop    @IoWriteFifo32_Loop
-
-@IoWriteFifo32_Done:
-    mov     rsi, r8             ; restore rsi
-    ret
-
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
index a1be123d80..87c7045f63 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -158,7 +158,6 @@
 
 [Components.IA32, Components.X64]
   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
-  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
   MdePkg/Library/BaseMemoryLibMmx/BaseMemoryLibMmx.inf
   MdePkg/Library/BaseMemoryLibOptDxe/BaseMemoryLibOptDxe.inf
   MdePkg/Library/BaseMemoryLibOptPei/BaseMemoryLibOptPei.inf
-- 
2.31.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110188): https://edk2.groups.io/g/devel/message/110188
Mute This Topic: https://groups.io/mt/102215669/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] 27+ messages in thread

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
                   ` (6 preceding siblings ...)
  2023-10-27  5:43 ` [edk2-devel] [PATCH 7/7] MdePkg:remove BaseIoLibIntrinsicSev related code duntan
@ 2023-10-27  5:49 ` Yao, Jiewen
  2023-10-27  6:31   ` duntan
  7 siblings, 1 reply; 27+ messages in thread
From: Yao, Jiewen @ 2023-10-27  5:49 UTC (permalink / raw)
  To: devel@edk2.groups.io, Tan, Dun

HI
Since this impact TDX and SEV, would you please let me know what kind of test you have done?
Have you validated TDX and SEV before you submit the patch? Please describe that clearly in your patch description.

Also please include AMD SEV reviewer in this patch series.

Thank you
Yao, Jiewen

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan
> Sent: Friday, October 27, 2023 1:43 PM
> To: devel@edk2.groups.io
> Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and
> remove BaseIoLibIntrinsicSev
> 
> The goal is to have single BaseIoLibIntrinsic instance that can also used for sev
> and Tdx.
> In this patch set, string I/O instructions are deleted in IoRead/WriteFifo API.
> Then change the source file of BaseIoLibIntrinsic to also support Tdx and sev
> feature. So BaseIoLibIntrinsicSev and related assembly code can be removed.
> 
> Dun Tan (7):
>   MdePkg: Create TdxLibNull.inf instance
>   MdePkg: Add CcProbeLibNull and TdxLibNull implement
>   MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
>   MdePkg:support Tdx and sev in BaseIoLibIntrinsic
>   OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
>   OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
>   MdePkg:remove BaseIoLibIntrinsicSev related code
> 
>  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14 ++++++++++----
>  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61 ------------------
> -------------------------------------------
>  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 --------------------
> --------------------------------------------------------------------------------------------------
> -------------
>  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 ------------------
> --------------------------------------------------------------------------------------------------
> --------------------------------------------------------------------------------------------------
> -------------------------------------------------------------------------------
>  MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
> +++++++++++++++++++++++++++++++++++++--------
>  MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ------------------------
> --------------------------------------------------------------------------------------------------
> --------------------------------------------
>  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 --------------------
> --------------------------------------------------------------------------------------------------
> --
>  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ------------------
> --------------------------------------------------------------------------------------------------
> --------------------------------------------------------------------------------------------------
> --------------------------------------------------------------------
>  MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
> +++++++++++++++++++++
>  MdePkg/MdeLibs.dsc.inc                                      |   4 +++-
>  MdePkg/MdePkg.dsc                                           |   2 +-
>  OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
>  OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
>  OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
>  OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
>  OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
>  OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
>  OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
>  OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
>  OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
>  OvmfPkg/OvmfXen.dsc                                         |   2 +-
>  21 files changed, 83 insertions(+), 1077 deletions(-)
>  delete mode 100644
> MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
>  create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
> 
> --
> 2.31.1.windows.1
> 
> 
> 
> 
> 



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



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

* Re: [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance
  2023-10-27  5:42 ` [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance duntan
@ 2023-10-27  5:54   ` Ni, Ray
  2023-10-27  5:56     ` Ni, Ray
  0 siblings, 1 reply; 27+ messages in thread
From: Ni, Ray @ 2023-10-27  5:54 UTC (permalink / raw)
  To: Tan, Dun, devel@edk2.groups.io
  Cc: Kinney, Michael D, Gao, Liming, Liu, Zhiguang

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

TdxLibNull.c is missing in the patch.

Thanks,
Ray
________________________________
From: Tan, Dun <dun.tan@intel.com>
Sent: Friday, October 27, 2023 1:42 PM
To: devel@edk2.groups.io <devel@edk2.groups.io>
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance

Create null instance for TdxLib. The IoLib instance
BaseIoLibIntrinsic.inf will consume the TdxLibNull
to pass build.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 MdePkg/Library/TdxLib/TdxLibNull.inf | 21 +++++++++++++++++++++
 MdePkg/MdePkg.dsc                    |  1 +
 2 files changed, 22 insertions(+)

diff --git a/MdePkg/Library/TdxLib/TdxLibNull.inf b/MdePkg/Library/TdxLib/TdxLibNull.inf
new file mode 100644
index 0000000000..ecf20e12e1
--- /dev/null
+++ b/MdePkg/Library/TdxLib/TdxLibNull.inf
@@ -0,0 +1,21 @@
+## @file
+# Tdx null instance.
+#
+#  Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = TdxLibNull
+  FILE_GUID                      = AA75759C-24E0-42FE-B5A4-83678548FCEF
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = TdxLib
+
+[Sources]
+  TdxLibNull.c
+
+[Packages]
+  MdePkg/MdePkg.dec
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
index 3abd1a1e23..a1be123d80 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -184,6 +184,7 @@
   MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf
   MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
   MdePkg/Library/TdxLib/TdxLib.inf
+  MdePkg/Library/TdxLib/TdxLibNull.inf
   MdePkg/Library/MipiSysTLib/MipiSysTLib.inf
   MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.inf

--
2.31.1.windows.1



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



[-- Attachment #2: Type: text/html, Size: 5418 bytes --]

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

* Re: [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance
  2023-10-27  5:54   ` Ni, Ray
@ 2023-10-27  5:56     ` Ni, Ray
  2023-10-27  6:32       ` duntan
  0 siblings, 1 reply; 27+ messages in thread
From: Ni, Ray @ 2023-10-27  5:56 UTC (permalink / raw)
  To: Tan, Dun, devel@edk2.groups.io
  Cc: Kinney, Michael D, Gao, Liming, Liu, Zhiguang

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

Please ignore my comments.
That's an existing file for IA32 build. Your patch adds a NULL instance for all archs.

Thanks,
Ray
________________________________
From: Ni, Ray <ray.ni@intel.com>
Sent: Friday, October 27, 2023 1:54 PM
To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io <devel@edk2.groups.io>
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>
Subject: Re: [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance

TdxLibNull.c is missing in the patch.

Thanks,
Ray
________________________________
From: Tan, Dun <dun.tan@intel.com>
Sent: Friday, October 27, 2023 1:42 PM
To: devel@edk2.groups.io <devel@edk2.groups.io>
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Ni, Ray <ray.ni@intel.com>
Subject: [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance

Create null instance for TdxLib. The IoLib instance
BaseIoLibIntrinsic.inf will consume the TdxLibNull
to pass build.

Signed-off-by: Dun Tan <dun.tan@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
---
 MdePkg/Library/TdxLib/TdxLibNull.inf | 21 +++++++++++++++++++++
 MdePkg/MdePkg.dsc                    |  1 +
 2 files changed, 22 insertions(+)

diff --git a/MdePkg/Library/TdxLib/TdxLibNull.inf b/MdePkg/Library/TdxLib/TdxLibNull.inf
new file mode 100644
index 0000000000..ecf20e12e1
--- /dev/null
+++ b/MdePkg/Library/TdxLib/TdxLibNull.inf
@@ -0,0 +1,21 @@
+## @file
+# Tdx null instance.
+#
+#  Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = TdxLibNull
+  FILE_GUID                      = AA75759C-24E0-42FE-B5A4-83678548FCEF
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = TdxLib
+
+[Sources]
+  TdxLibNull.c
+
+[Packages]
+  MdePkg/MdePkg.dec
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
index 3abd1a1e23..a1be123d80 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -184,6 +184,7 @@
   MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf
   MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
   MdePkg/Library/TdxLib/TdxLib.inf
+  MdePkg/Library/TdxLib/TdxLibNull.inf
   MdePkg/Library/MipiSysTLib/MipiSysTLib.inf
   MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.inf

--
2.31.1.windows.1



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



[-- Attachment #2: Type: text/html, Size: 7183 bytes --]

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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-27  5:49 ` [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev Yao, Jiewen
@ 2023-10-27  6:31   ` duntan
  2023-10-27  7:06     ` Yao, Jiewen
  0 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-10-27  6:31 UTC (permalink / raw)
  To: Yao, Jiewen, devel@edk2.groups.io

Hi Jiewen,

Currently I'm working on the Tdx test. Since the patch set doesn't change the code logic when Tdx or SEV is enabled, so I want to send out the patch as soon as possible to see if there is any comments from community. 

I will include AMD SEV reviewer in this patch series. Thanks for reminding.

Thanks,
Dun

-----Original Message-----
From: Yao, Jiewen <jiewen.yao@intel.com> 
Sent: Friday, October 27, 2023 1:49 PM
To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev

HI
Since this impact TDX and SEV, would you please let me know what kind of test you have done?
Have you validated TDX and SEV before you submit the patch? Please describe that clearly in your patch description.

Also please include AMD SEV reviewer in this patch series.

Thank you
Yao, Jiewen

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan
> Sent: Friday, October 27, 2023 1:43 PM
> To: devel@edk2.groups.io
> Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> 
> The goal is to have single BaseIoLibIntrinsic instance that can also 
> used for sev and Tdx.
> In this patch set, string I/O instructions are deleted in IoRead/WriteFifo API.
> Then change the source file of BaseIoLibIntrinsic to also support Tdx 
> and sev feature. So BaseIoLibIntrinsicSev and related assembly code can be removed.
> 
> Dun Tan (7):
>   MdePkg: Create TdxLibNull.inf instance
>   MdePkg: Add CcProbeLibNull and TdxLibNull implement
>   MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
>   MdePkg:support Tdx and sev in BaseIoLibIntrinsic
>   OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
>   OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
>   MdePkg:remove BaseIoLibIntrinsicSev related code
> 
>  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14 ++++++++++----
>  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61 
> ------------------
> -------------------------------------------
>  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 --------------------
> ----------------------------------------------------------------------
> ----------------------------
> -------------
>  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 ------------------
> ----------------------------------------------------------------------
> ----------------------------
> ----------------------------------------------------------------------
> ----------------------------
> -------------------------------------------------------------------------------
>  MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
> +++++++++++++++++++++++++++++++++++++--------
>  MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ------------------------
> ----------------------------------------------------------------------
> ----------------------------
> --------------------------------------------
>  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 --------------------
> ----------------------------------------------------------------------
> ----------------------------
> --
>  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ------------------
> ----------------------------------------------------------------------
> ----------------------------
> ----------------------------------------------------------------------
> ----------------------------
> --------------------------------------------------------------------
>  MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
> +++++++++++++++++++++
>  MdePkg/MdeLibs.dsc.inc                                      |   4 +++-
>  MdePkg/MdePkg.dsc                                           |   2 +-
>  OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
>  OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
>  OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
>  OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
>  OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
>  OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
>  OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
>  OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
>  OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
>  OvmfPkg/OvmfXen.dsc                                         |   2 +-
>  21 files changed, 83 insertions(+), 1077 deletions(-)  delete mode 
> 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
>  delete mode 100644 
> MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
>  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
>  delete mode 100644 
> MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
>  create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
> 
> --
> 2.31.1.windows.1
> 
> 
> 
> 
> 



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



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

* Re: [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance
  2023-10-27  5:56     ` Ni, Ray
@ 2023-10-27  6:32       ` duntan
  0 siblings, 0 replies; 27+ messages in thread
From: duntan @ 2023-10-27  6:32 UTC (permalink / raw)
  To: Ni, Ray, devel@edk2.groups.io
  Cc: Kinney, Michael D, Gao, Liming, Liu, Zhiguang

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

Yes TdxLibNull.c is an existing file for IA32 build in the TdxLib.inf

Thanks,
Dun
From: Ni, Ray <ray.ni@intel.com>
Sent: Friday, October 27, 2023 1:56 PM
To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>
Subject: Re: [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance

Please ignore my comments.
That's an existing file for IA32 build. Your patch adds a NULL instance for all archs.

Thanks,
Ray
________________________________
From: Ni, Ray <ray.ni@intel.com<mailto:ray.ni@intel.com>>
Sent: Friday, October 27, 2023 1:54 PM
To: Tan, Dun <dun.tan@intel.com<mailto:dun.tan@intel.com>>; devel@edk2.groups.io<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>>
Cc: Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>; Gao, Liming <gaoliming@byosoft.com.cn<mailto:gaoliming@byosoft.com.cn>>; Liu, Zhiguang <zhiguang.liu@intel.com<mailto:zhiguang.liu@intel.com>>
Subject: Re: [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance

TdxLibNull.c is missing in the patch.

Thanks,
Ray
________________________________
From: Tan, Dun <dun.tan@intel.com<mailto:dun.tan@intel.com>>
Sent: Friday, October 27, 2023 1:42 PM
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io> <devel@edk2.groups.io<mailto:devel@edk2.groups.io>>
Cc: Kinney, Michael D <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>; Gao, Liming <gaoliming@byosoft.com.cn<mailto:gaoliming@byosoft.com.cn>>; Liu, Zhiguang <zhiguang.liu@intel.com<mailto:zhiguang.liu@intel.com>>; Ni, Ray <ray.ni@intel.com<mailto:ray.ni@intel.com>>
Subject: [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance

Create null instance for TdxLib. The IoLib instance
BaseIoLibIntrinsic.inf will consume the TdxLibNull
to pass build.

Signed-off-by: Dun Tan <dun.tan@intel.com<mailto:dun.tan@intel.com>>
Cc: Michael D Kinney <michael.d.kinney@intel.com<mailto:michael.d.kinney@intel.com>>
Cc: Liming Gao <gaoliming@byosoft.com.cn<mailto:gaoliming@byosoft.com.cn>>
Cc: Zhiguang Liu <zhiguang.liu@intel.com<mailto:zhiguang.liu@intel.com>>
Cc: Ray Ni <ray.ni@intel.com<mailto:ray.ni@intel.com>>
---
 MdePkg/Library/TdxLib/TdxLibNull.inf | 21 +++++++++++++++++++++
 MdePkg/MdePkg.dsc                    |  1 +
 2 files changed, 22 insertions(+)

diff --git a/MdePkg/Library/TdxLib/TdxLibNull.inf b/MdePkg/Library/TdxLib/TdxLibNull.inf
new file mode 100644
index 0000000000..ecf20e12e1
--- /dev/null
+++ b/MdePkg/Library/TdxLib/TdxLibNull.inf
@@ -0,0 +1,21 @@
+## @file
+# Tdx null instance.
+#
+#  Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = TdxLibNull
+  FILE_GUID                      = AA75759C-24E0-42FE-B5A4-83678548FCEF
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = TdxLib
+
+[Sources]
+  TdxLibNull.c
+
+[Packages]
+  MdePkg/MdePkg.dec
diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
index 3abd1a1e23..a1be123d80 100644
--- a/MdePkg/MdePkg.dsc
+++ b/MdePkg/MdePkg.dsc
@@ -184,6 +184,7 @@
   MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf
   MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
   MdePkg/Library/TdxLib/TdxLib.inf
+  MdePkg/Library/TdxLib/TdxLibNull.inf
   MdePkg/Library/MipiSysTLib/MipiSysTLib.inf
   MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.inf

--
2.31.1.windows.1


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



[-- Attachment #2: Type: text/html, Size: 10214 bytes --]

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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-27  6:31   ` duntan
@ 2023-10-27  7:06     ` Yao, Jiewen
  2023-10-27  7:34       ` duntan
  0 siblings, 1 reply; 27+ messages in thread
From: Yao, Jiewen @ 2023-10-27  7:06 UTC (permalink / raw)
  To: Tan, Dun, devel@edk2.groups.io

Here is my suggestion:

1) Please perform the test to ensure the functional part is correct.

Without that, how can people know you are doing things right?

2) If you do not run any test, before you send out patch, please call out that clearly.
That is important to reminder the maintainer: Don't merge, even if it pass review.

Otherwise, once the review passed, the maintainer may merge it.
I don't think that is the intention.



Thank you
Yao, Jiewen
 

> -----Original Message-----
> From: Tan, Dun <dun.tan@intel.com>
> Sent: Friday, October 27, 2023 2:32 PM
> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic
> and remove BaseIoLibIntrinsicSev
> 
> Hi Jiewen,
> 
> Currently I'm working on the Tdx test. Since the patch set doesn't change the
> code logic when Tdx or SEV is enabled, so I want to send out the patch as soon as
> possible to see if there is any comments from community.
> 
> I will include AMD SEV reviewer in this patch series. Thanks for reminding.
> 
> Thanks,
> Dun
> 
> -----Original Message-----
> From: Yao, Jiewen <jiewen.yao@intel.com>
> Sent: Friday, October 27, 2023 1:49 PM
> To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic
> and remove BaseIoLibIntrinsicSev
> 
> HI
> Since this impact TDX and SEV, would you please let me know what kind of test
> you have done?
> Have you validated TDX and SEV before you submit the patch? Please describe
> that clearly in your patch description.
> 
> Also please include AMD SEV reviewer in this patch series.
> 
> Thank you
> Yao, Jiewen
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of duntan
> > Sent: Friday, October 27, 2023 1:43 PM
> > To: devel@edk2.groups.io
> > Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
> > BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> >
> > The goal is to have single BaseIoLibIntrinsic instance that can also
> > used for sev and Tdx.
> > In this patch set, string I/O instructions are deleted in IoRead/WriteFifo API.
> > Then change the source file of BaseIoLibIntrinsic to also support Tdx
> > and sev feature. So BaseIoLibIntrinsicSev and related assembly code can be
> removed.
> >
> > Dun Tan (7):
> >   MdePkg: Create TdxLibNull.inf instance
> >   MdePkg: Add CcProbeLibNull and TdxLibNull implement
> >   MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
> >   MdePkg:support Tdx and sev in BaseIoLibIntrinsic
> >   OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
> >   OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
> >   MdePkg:remove BaseIoLibIntrinsicSev related code
> >
> >  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14 ++++++++++---
> -
> >  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61
> > ------------------
> > -------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 -----------------
> ---
> > ----------------------------------------------------------------------
> > ----------------------------
> > -------------
> >  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 ---------------
> ---
> > ----------------------------------------------------------------------
> > ----------------------------
> > ----------------------------------------------------------------------
> > ----------------------------
> > -------------------------------------------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
> > +++++++++++++++++++++++++++++++++++++--------
> >  MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ----------------------
> --
> > ----------------------------------------------------------------------
> > ----------------------------
> > --------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 ------------------
> --
> > ----------------------------------------------------------------------
> > ----------------------------
> > --
> >  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ----------------
> --
> > ----------------------------------------------------------------------
> > ----------------------------
> > ----------------------------------------------------------------------
> > ----------------------------
> > --------------------------------------------------------------------
> >  MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
> > +++++++++++++++++++++
> >  MdePkg/MdeLibs.dsc.inc                                      |   4 +++-
> >  MdePkg/MdePkg.dsc                                           |   2 +-
> >  OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
> >  OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
> >  OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
> >  OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
> >  OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
> >  OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
> >  OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
> >  OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
> >  OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
> >  OvmfPkg/OvmfXen.dsc                                         |   2 +-
> >  21 files changed, 83 insertions(+), 1077 deletions(-)  delete mode
> > 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> >  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
> >  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
> >  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
> >  create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
> >
> > --
> > 2.31.1.windows.1
> >
> >
> >
> > 
> >



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



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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-27  7:06     ` Yao, Jiewen
@ 2023-10-27  7:34       ` duntan
  2023-10-27  8:05         ` duntan
  0 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-10-27  7:34 UTC (permalink / raw)
  To: Yao, Jiewen, devel@edk2.groups.io

Thanks for the suggestion. 
I'll update the test result once I finished the test. Also the abstract message in this patch has been modified to mention that this patch should not be merged now.

Thanks,
Dun

-----Original Message-----
From: Yao, Jiewen <jiewen.yao@intel.com> 
Sent: Friday, October 27, 2023 3:07 PM
To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io
Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev

Here is my suggestion:

1) Please perform the test to ensure the functional part is correct.

Without that, how can people know you are doing things right?

2) If you do not run any test, before you send out patch, please call out that clearly.
That is important to reminder the maintainer: Don't merge, even if it pass review.

Otherwise, once the review passed, the maintainer may merge it.
I don't think that is the intention.



Thank you
Yao, Jiewen
 

> -----Original Message-----
> From: Tan, Dun <dun.tan@intel.com>
> Sent: Friday, October 27, 2023 2:32 PM
> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> 
> Hi Jiewen,
> 
> Currently I'm working on the Tdx test. Since the patch set doesn't 
> change the code logic when Tdx or SEV is enabled, so I want to send 
> out the patch as soon as possible to see if there is any comments from community.
> 
> I will include AMD SEV reviewer in this patch series. Thanks for reminding.
> 
> Thanks,
> Dun
> 
> -----Original Message-----
> From: Yao, Jiewen <jiewen.yao@intel.com>
> Sent: Friday, October 27, 2023 1:49 PM
> To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> 
> HI
> Since this impact TDX and SEV, would you please let me know what kind 
> of test you have done?
> Have you validated TDX and SEV before you submit the patch? Please 
> describe that clearly in your patch description.
> 
> Also please include AMD SEV reviewer in this patch series.
> 
> Thank you
> Yao, Jiewen
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of 
> > duntan
> > Sent: Friday, October 27, 2023 1:43 PM
> > To: devel@edk2.groups.io
> > Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
> > BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev (Don't merge because the test hasn't been completed yet.)
> >
> > The goal is to have single BaseIoLibIntrinsic instance that can also 
> > used for sev and Tdx.
> > In this patch set, string I/O instructions are deleted in IoRead/WriteFifo API.
> > Then change the source file of BaseIoLibIntrinsic to also support 
> > Tdx and sev feature. So BaseIoLibIntrinsicSev and related assembly 
> > code can be
> removed.
> >
> > Dun Tan (7):
> >   MdePkg: Create TdxLibNull.inf instance
> >   MdePkg: Add CcProbeLibNull and TdxLibNull implement
> >   MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
> >   MdePkg:support Tdx and sev in BaseIoLibIntrinsic
> >   OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
> >   OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
> >   MdePkg:remove BaseIoLibIntrinsicSev related code
> >
> >  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14 ++++++++++---
> -
> >  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61
> > ------------------
> > -------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 -----------------
> ---
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > -------------
> >  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 ---------------
> ---
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > -------------------------------------------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
> > +++++++++++++++++++++++++++++++++++++--------
> >  MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ----------------------
> --
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 ------------------
> --
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --
> >  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ----------------
> --
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------------------------------
> >  MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
> > +++++++++++++++++++++
> >  MdePkg/MdeLibs.dsc.inc                                      |   4 +++-
> >  MdePkg/MdePkg.dsc                                           |   2 +-
> >  OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
> >  OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
> >  OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
> >  OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
> >  OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
> >  OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
> >  OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
> >  OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
> >  OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
> >  OvmfPkg/OvmfXen.dsc                                         |   2 +-
> >  21 files changed, 83 insertions(+), 1077 deletions(-)  delete mode
> > 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> >  delete mode 100644 
> > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
> >  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
> >  delete mode 100644 
> > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
> >  create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
> >
> > --
> > 2.31.1.windows.1
> >
> >
> >
> > 
> >



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



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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-27  7:34       ` duntan
@ 2023-10-27  8:05         ` duntan
  2023-10-27 21:31           ` Lendacky, Thomas via groups.io
  0 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-10-27  8:05 UTC (permalink / raw)
  To: devel@edk2.groups.io, leo.duran@amd.com, brijesh.singh@amd.com,
	Chang, Abner, Tom Lendacky, michael.roth@amd.com,
	Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

Hi all,

Could you please help to review this patch set? In this patch set, the IoLib instance BaseIoLibIntrinsic is modified to support AMD SEV feature and the BaseIoLibIntrinsicSev is removed.
Also could you help to do a test on AMD processor to make sure that the SEV feature still works good with this patch set?

Thanks,
Dun

-----Original Message-----
From: Tan, Dun 
Sent: Friday, October 27, 2023 3:35 PM
To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev

Thanks for the suggestion. 
I'll update the test result once I finished the test. Also the abstract message in this patch has been modified to mention that this patch should not be merged now.

Thanks,
Dun

-----Original Message-----
From: Yao, Jiewen <jiewen.yao@intel.com>
Sent: Friday, October 27, 2023 3:07 PM
To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io
Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev

Here is my suggestion:

1) Please perform the test to ensure the functional part is correct.

Without that, how can people know you are doing things right?

2) If you do not run any test, before you send out patch, please call out that clearly.
That is important to reminder the maintainer: Don't merge, even if it pass review.

Otherwise, once the review passed, the maintainer may merge it.
I don't think that is the intention.



Thank you
Yao, Jiewen
 

> -----Original Message-----
> From: Tan, Dun <dun.tan@intel.com>
> Sent: Friday, October 27, 2023 2:32 PM
> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> 
> Hi Jiewen,
> 
> Currently I'm working on the Tdx test. Since the patch set doesn't 
> change the code logic when Tdx or SEV is enabled, so I want to send 
> out the patch as soon as possible to see if there is any comments from community.
> 
> I will include AMD SEV reviewer in this patch series. Thanks for reminding.
> 
> Thanks,
> Dun
> 
> -----Original Message-----
> From: Yao, Jiewen <jiewen.yao@intel.com>
> Sent: Friday, October 27, 2023 1:49 PM
> To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> 
> HI
> Since this impact TDX and SEV, would you please let me know what kind 
> of test you have done?
> Have you validated TDX and SEV before you submit the patch? Please 
> describe that clearly in your patch description.
> 
> Also please include AMD SEV reviewer in this patch series.
> 
> Thank you
> Yao, Jiewen
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of 
> > duntan
> > Sent: Friday, October 27, 2023 1:43 PM
> > To: devel@edk2.groups.io
> > Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
> > BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev (Don't merge 
> > because the test hasn't been completed yet.)
> >
> > The goal is to have single BaseIoLibIntrinsic instance that can also 
> > used for sev and Tdx.
> > In this patch set, string I/O instructions are deleted in IoRead/WriteFifo API.
> > Then change the source file of BaseIoLibIntrinsic to also support 
> > Tdx and sev feature. So BaseIoLibIntrinsicSev and related assembly 
> > code can be
> removed.
> >
> > Dun Tan (7):
> >   MdePkg: Create TdxLibNull.inf instance
> >   MdePkg: Add CcProbeLibNull and TdxLibNull implement
> >   MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
> >   MdePkg:support Tdx and sev in BaseIoLibIntrinsic
> >   OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
> >   OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
> >   MdePkg:remove BaseIoLibIntrinsicSev related code
> >
> >  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14 ++++++++++---
> -
> >  MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61
> > ------------------
> > -------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 -----------------
> ---
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > -------------
> >  MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 ---------------
> ---
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > -------------------------------------------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
> > +++++++++++++++++++++++++++++++++++++--------
> >  MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ----------------------
> --
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------
> >  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 ------------------
> --
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --
> >  MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ----------------
> --
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------------------------------
> > --
> > ----------------------------
> > --------------------------------------------------------------------
> >  MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
> > +++++++++++++++++++++
> >  MdePkg/MdeLibs.dsc.inc                                      |   4 +++-
> >  MdePkg/MdePkg.dsc                                           |   2 +-
> >  OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
> >  OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
> >  OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
> >  OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
> >  OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
> >  OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
> >  OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
> >  OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
> >  OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
> >  OvmfPkg/OvmfXen.dsc                                         |   2 +-
> >  21 files changed, 83 insertions(+), 1077 deletions(-)  delete mode
> > 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
> >  delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
> >  delete mode 100644
> > MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
> >  create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
> >
> > --
> > 2.31.1.windows.1
> >
> >
> >
> > 
> >



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



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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-27  8:05         ` duntan
@ 2023-10-27 21:31           ` Lendacky, Thomas via groups.io
  2023-10-28 11:40             ` Laszlo Ersek
  0 siblings, 1 reply; 27+ messages in thread
From: Lendacky, Thomas via groups.io @ 2023-10-27 21:31 UTC (permalink / raw)
  To: Tan, Dun, devel@edk2.groups.io, leo.duran@amd.com,
	brijesh.singh@amd.com, Chang, Abner, michael.roth@amd.com,
	Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

On 10/27/23 03:05, Tan, Dun wrote:
> Hi all,
> 
> Could you please help to review this patch set? In this patch set, the IoLib instance BaseIoLibIntrinsic is modified to support AMD SEV feature and the BaseIoLibIntrinsicSev is removed.
> Also could you help to do a test on AMD processor to make sure that the SEV feature still works good with this patch set?

I was able to test SEV, SEV-ES and SEV-SNP guests successfully at each 
step of the patchset.

However, you are unrolling the string I/O for everyone, now, not just SEV 
guests. Is that acceptable to the community? I think there need to be 
comments in IoLibFifo.c around the new code about why the access is 
unrolled/looping so that someone down the road doesn't come along and try 
to use string I/O again.

 From a commit message standpoint, you have up to 74 characters per line 
to use and I see most of your messages do not make use of that. Also, you 
use sev when it should be SEV. Using SEV will make grep'ing commit 
messages simpler.

Thanks,
Tom

> 
> Thanks,
> Dun
> 
> -----Original Message-----
> From: Tan, Dun
> Sent: Friday, October 27, 2023 3:35 PM
> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> 
> Thanks for the suggestion.
> I'll update the test result once I finished the test. Also the abstract message in this patch has been modified to mention that this patch should not be merged now.
> 
> Thanks,
> Dun
> 
> -----Original Message-----
> From: Yao, Jiewen <jiewen.yao@intel.com>
> Sent: Friday, October 27, 2023 3:07 PM
> To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io
> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
> 
> Here is my suggestion:
> 
> 1) Please perform the test to ensure the functional part is correct.
> 
> Without that, how can people know you are doing things right?
> 
> 2) If you do not run any test, before you send out patch, please call out that clearly.
> That is important to reminder the maintainer: Don't merge, even if it pass review.
> 
> Otherwise, once the review passed, the maintainer may merge it.
> I don't think that is the intention.
> 
> 
> 
> Thank you
> Yao, Jiewen
>   
> 
>> -----Original Message-----
>> From: Tan, Dun <dun.tan@intel.com>
>> Sent: Friday, October 27, 2023 2:32 PM
>> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>
>> Hi Jiewen,
>>
>> Currently I'm working on the Tdx test. Since the patch set doesn't
>> change the code logic when Tdx or SEV is enabled, so I want to send
>> out the patch as soon as possible to see if there is any comments from community.
>>
>> I will include AMD SEV reviewer in this patch series. Thanks for reminding.
>>
>> Thanks,
>> Dun
>>
>> -----Original Message-----
>> From: Yao, Jiewen <jiewen.yao@intel.com>
>> Sent: Friday, October 27, 2023 1:49 PM
>> To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>
>> HI
>> Since this impact TDX and SEV, would you please let me know what kind
>> of test you have done?
>> Have you validated TDX and SEV before you submit the patch? Please
>> describe that clearly in your patch description.
>>
>> Also please include AMD SEV reviewer in this patch series.
>>
>> Thank you
>> Yao, Jiewen
>>
>>> -----Original Message-----
>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
>>> duntan
>>> Sent: Friday, October 27, 2023 1:43 PM
>>> To: devel@edk2.groups.io
>>> Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev (Don't merge
>>> because the test hasn't been completed yet.)
>>>
>>> The goal is to have single BaseIoLibIntrinsic instance that can also
>>> used for sev and Tdx.
>>> In this patch set, string I/O instructions are deleted in IoRead/WriteFifo API.
>>> Then change the source file of BaseIoLibIntrinsic to also support
>>> Tdx and sev feature. So BaseIoLibIntrinsicSev and related assembly
>>> code can be
>> removed.
>>>
>>> Dun Tan (7):
>>>    MdePkg: Create TdxLibNull.inf instance
>>>    MdePkg: Add CcProbeLibNull and TdxLibNull implement
>>>    MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
>>>    MdePkg:support Tdx and sev in BaseIoLibIntrinsic
>>>    OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
>>>    OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
>>>    MdePkg:remove BaseIoLibIntrinsicSev related code
>>>
>>>   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14 ++++++++++---
>> -
>>>   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61
>>> ------------------
>>> -------------------------------------------
>>>   MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131 -----------------
>> ---
>>> --------------------------------------------------------------------
>>> --
>>> ----------------------------
>>> -------------
>>>   MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293 ---------------
>> ---
>>> --------------------------------------------------------------------
>>> --
>>> ----------------------------
>>> --------------------------------------------------------------------
>>> --
>>> ----------------------------
>>> -------------------------------------------------------------------------------
>>>   MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
>>> +++++++++++++++++++++++++++++++++++++--------
>>>   MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166 ----------------------
>> --
>>> --------------------------------------------------------------------
>>> --
>>> ----------------------------
>>> --------------------------------------------
>>>   MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120 ------------------
>> --
>>> --------------------------------------------------------------------
>>> --
>>> ----------------------------
>>> --
>>>   MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282 ----------------
>> --
>>> --------------------------------------------------------------------
>>> --
>>> ----------------------------
>>> --------------------------------------------------------------------
>>> --
>>> ----------------------------
>>> --------------------------------------------------------------------
>>>   MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
>>> +++++++++++++++++++++
>>>   MdePkg/MdeLibs.dsc.inc                                      |   4 +++-
>>>   MdePkg/MdePkg.dsc                                           |   2 +-
>>>   OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
>>>   OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
>>>   OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
>>>   OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
>>>   OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
>>>   OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
>>>   OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
>>>   OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
>>>   OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
>>>   OvmfPkg/OvmfXen.dsc                                         |   2 +-
>>>   21 files changed, 83 insertions(+), 1077 deletions(-)  delete mode
>>> 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>>>   delete mode 100644
>>> MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
>>>   delete mode 100644
>>> MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
>>>   delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
>>>   delete mode 100644
>>> MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
>>>   delete mode 100644
>>> MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
>>>   create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
>>>
>>> --
>>> 2.31.1.windows.1
>>>
>>>
>>>
>>> 
>>>
> 


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



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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-27 21:31           ` Lendacky, Thomas via groups.io
@ 2023-10-28 11:40             ` Laszlo Ersek
  2023-10-31  9:56               ` duntan
  0 siblings, 1 reply; 27+ messages in thread
From: Laszlo Ersek @ 2023-10-28 11:40 UTC (permalink / raw)
  To: devel, thomas.lendacky, Tan, Dun, leo.duran@amd.com,
	brijesh.singh@amd.com, Chang, Abner, michael.roth@amd.com,
	Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

On 10/27/23 23:31, Lendacky, Thomas via groups.io wrote:
> On 10/27/23 03:05, Tan, Dun wrote:
>> Hi all,
>>
>> Could you please help to review this patch set? In this patch set, the
>> IoLib instance BaseIoLibIntrinsic is modified to support AMD SEV
>> feature and the BaseIoLibIntrinsicSev is removed.
>> Also could you help to do a test on AMD processor to make sure that
>> the SEV feature still works good with this patch set?
> 
> I was able to test SEV, SEV-ES and SEV-SNP guests successfully at each
> step of the patchset.
> 
> However, you are unrolling the string I/O for everyone, now, not just
> SEV guests. Is that acceptable to the community?

Thank you for making this comment, Tom, because this is exactly what I
meant to raise immediately, upon reading the cover letter.

No, it is not acceptable.

The FIFO variants exist for a reason. When the guest performs multiple
individual IO Port accesses, those translate to individual traps to the
hypervisor, with significant performance impact. When IO Port string
operations are used instead, with the REP prefix, then there is just
*one* trap, and the hypervisor can perform the whole "string" transfer
in one go (up to a page size, anyways, IIRC). This has very visible
impact on OVMF debug output (via the isa-debugcon QEMU device), and/or
in case fw_cfg is used without DMA support.

(If you search OvmfPkg for IoReadFifo8 and IoWriteFifo8, you'll find the
QemuFwCfgLib and PlatformDebugLibIoPort libraries using them.)

In fact, during initial SEV enablement, the SEV enlightenment was
introduced because SEV does not handle the REP prefix with these
instructions, and so a fallback had to be added.

See commits b6d11d7c4678 ("MdePkg: BaseIoLibIntrinsic (IoLib class)
library", 2017-04-13) and 97353a9c914d ("OvmfPkg: Update dsc to use
IoLib from BaseIoLibIntrinsicSev.inf", 2017-07-10).

Accordingly, there's a *huge* performance (boot time) impact when you
boot OVMF in a SEV guest with DEBUG_VERBOSE messages enabled (and
captured; i.e., when the isa-debugcon device is active).

> I think there need to
> be comments in IoLibFifo.c around the new code about why the access is
> unrolled/looping so that someone down the road doesn't come along and
> try to use string I/O again.

String IO must be preserved for such guests that don't run in
Confidential Virtual Machines ("CVM"s).

In particular patches #6 and #7 would damage OVMF.

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

Laszlo

> 
> From a commit message standpoint, you have up to 74 characters per line
> to use and I see most of your messages do not make use of that. Also,
> you use sev when it should be SEV. Using SEV will make grep'ing commit
> messages simpler.
> 
> Thanks,
> Tom
> 
>>
>> Thanks,
>> Dun
>>
>> -----Original Message-----
>> From: Tan, Dun
>> Sent: Friday, October 27, 2023 3:35 PM
>> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>
>> Thanks for the suggestion.
>> I'll update the test result once I finished the test. Also the
>> abstract message in this patch has been modified to mention that this
>> patch should not be merged now.
>>
>> Thanks,
>> Dun
>>
>> -----Original Message-----
>> From: Yao, Jiewen <jiewen.yao@intel.com>
>> Sent: Friday, October 27, 2023 3:07 PM
>> To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io
>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>
>> Here is my suggestion:
>>
>> 1) Please perform the test to ensure the functional part is correct.
>>
>> Without that, how can people know you are doing things right?
>>
>> 2) If you do not run any test, before you send out patch, please call
>> out that clearly.
>> That is important to reminder the maintainer: Don't merge, even if it
>> pass review.
>>
>> Otherwise, once the review passed, the maintainer may merge it.
>> I don't think that is the intention.
>>
>>
>>
>> Thank you
>> Yao, Jiewen
>>  
>>> -----Original Message-----
>>> From: Tan, Dun <dun.tan@intel.com>
>>> Sent: Friday, October 27, 2023 2:32 PM
>>> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
>>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>>
>>> Hi Jiewen,
>>>
>>> Currently I'm working on the Tdx test. Since the patch set doesn't
>>> change the code logic when Tdx or SEV is enabled, so I want to send
>>> out the patch as soon as possible to see if there is any comments
>>> from community.
>>>
>>> I will include AMD SEV reviewer in this patch series. Thanks for
>>> reminding.
>>>
>>> Thanks,
>>> Dun
>>>
>>> -----Original Message-----
>>> From: Yao, Jiewen <jiewen.yao@intel.com>
>>> Sent: Friday, October 27, 2023 1:49 PM
>>> To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
>>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>>
>>> HI
>>> Since this impact TDX and SEV, would you please let me know what kind
>>> of test you have done?
>>> Have you validated TDX and SEV before you submit the patch? Please
>>> describe that clearly in your patch description.
>>>
>>> Also please include AMD SEV reviewer in this patch series.
>>>
>>> Thank you
>>> Yao, Jiewen
>>>
>>>> -----Original Message-----
>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
>>>> duntan
>>>> Sent: Friday, October 27, 2023 1:43 PM
>>>> To: devel@edk2.groups.io
>>>> Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in
>>>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev (Don't merge
>>>> because the test hasn't been completed yet.)
>>>>
>>>> The goal is to have single BaseIoLibIntrinsic instance that can also
>>>> used for sev and Tdx.
>>>> In this patch set, string I/O instructions are deleted in
>>>> IoRead/WriteFifo API.
>>>> Then change the source file of BaseIoLibIntrinsic to also support
>>>> Tdx and sev feature. So BaseIoLibIntrinsicSev and related assembly
>>>> code can be
>>> removed.
>>>>
>>>> Dun Tan (7):
>>>>    MdePkg: Create TdxLibNull.inf instance
>>>>    MdePkg: Add CcProbeLibNull and TdxLibNull implement
>>>>    MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
>>>>    MdePkg:support Tdx and sev in BaseIoLibIntrinsic
>>>>    OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
>>>>    OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
>>>>    MdePkg:remove BaseIoLibIntrinsicSev related code
>>>>
>>>>   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14
>>>> ++++++++++---
>>> -
>>>>   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61
>>>> ------------------
>>>> -------------------------------------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131
>>>> -----------------
>>> ---
>>>> --------------------------------------------------------------------
>>>> -- 
>>>> ----------------------------
>>>> -------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293
>>>> ---------------
>>> ---
>>>> --------------------------------------------------------------------
>>>> -- 
>>>> ----------------------------
>>>> --------------------------------------------------------------------
>>>> -- 
>>>> ----------------------------
>>>> -------------------------------------------------------------------------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
>>>> +++++++++++++++++++++++++++++++++++++--------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166
>>>> ----------------------
>>> -- 
>>>> --------------------------------------------------------------------
>>>> -- 
>>>> ----------------------------
>>>> --------------------------------------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120
>>>> ------------------
>>> -- 
>>>> --------------------------------------------------------------------
>>>> -- 
>>>> ----------------------------
>>>> -- 
>>>>   MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282
>>>> ----------------
>>> -- 
>>>> --------------------------------------------------------------------
>>>> -- 
>>>> ----------------------------
>>>> --------------------------------------------------------------------
>>>> -- 
>>>> ----------------------------
>>>> --------------------------------------------------------------------
>>>>   MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
>>>> +++++++++++++++++++++
>>>>   MdePkg/MdeLibs.dsc.inc                                      |   4
>>>> +++-
>>>>   MdePkg/MdePkg.dsc                                           |   2 +-
>>>>   OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 +-
>>>>   OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 +-
>>>>   OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 +-
>>>>   OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 +-
>>>>   OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 ++-
>>>>   OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 +-
>>>>   OvmfPkg/OvmfPkgIa32.dsc                                     |   2 +-
>>>>   OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 +-
>>>>   OvmfPkg/OvmfPkgX64.dsc                                      |   2 +-
>>>>   OvmfPkg/OvmfXen.dsc                                         |   2 +-
>>>>   21 files changed, 83 insertions(+), 1077 deletions(-)  delete mode
>>>> 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
>>>>   delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
>>>>   create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
>>>>
>>>> -- 
>>>> 2.31.1.windows.1
>>>>
>>>>
>>>>
>>>>
>>>>
>>
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110242): https://edk2.groups.io/g/devel/message/110242
Mute This Topic: https://groups.io/mt/102215661/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] 27+ messages in thread

* Re: [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
  2023-10-27  5:42 ` [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files duntan
@ 2023-10-30 14:36   ` Ard Biesheuvel
  2023-10-31 12:30     ` Laszlo Ersek
  0 siblings, 1 reply; 27+ messages in thread
From: Ard Biesheuvel @ 2023-10-30 14:36 UTC (permalink / raw)
  To: devel, dun.tan
  Cc: Ard Biesheuvel, Jiewen Yao, Jordan Justen, Gerd Hoffmann, Ray Ni

On Fri, 27 Oct 2023 at 07:43, duntan <dun.tan@intel.com> wrote:
>
> Use BaseIoLibIntrinsic.inf in dsc files. The
> BaseIoLibIntrinsic supports Tdx and sev now.
> The BaseIoLibIntrinsicSev will be removed in
> the following patches.
>
> Signed-off-by: Dun Tan <dun.tan@intel.com>
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Cc: Jordan Justen <jordan.l.justen@intel.com>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Ray Ni <ray.ni@intel.com>

Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
> ---
>  OvmfPkg/AmdSev/AmdSevX64.dsc     | 2 +-
>  OvmfPkg/Bhyve/BhyveX64.dsc       | 2 +-
>  OvmfPkg/CloudHv/CloudHvX64.dsc   | 2 +-
>  OvmfPkg/IntelTdx/IntelTdxX64.dsc | 2 +-
>  OvmfPkg/Microvm/MicrovmX64.dsc   | 2 +-
>  OvmfPkg/OvmfPkgIa32.dsc          | 2 +-
>  OvmfPkg/OvmfPkgIa32X64.dsc       | 2 +-
>  OvmfPkg/OvmfPkgX64.dsc           | 2 +-
>  OvmfPkg/OvmfXen.dsc              | 2 +-
>  9 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc
> index 302c90e7c2..06086e0cc5 100644
> --- a/OvmfPkg/AmdSev/AmdSevX64.dsc
> +++ b/OvmfPkg/AmdSev/AmdSevX64.dsc
> @@ -142,7 +142,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc
> index 6693342c5f..1376dd7468 100644
> --- a/OvmfPkg/Bhyve/BhyveX64.dsc
> +++ b/OvmfPkg/Bhyve/BhyveX64.dsc
> @@ -149,7 +149,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/CloudHv/CloudHvX64.dsc b/OvmfPkg/CloudHv/CloudHvX64.dsc
> index 35942e02df..1d2a13dd92 100644
> --- a/OvmfPkg/CloudHv/CloudHvX64.dsc
> +++ b/OvmfPkg/CloudHv/CloudHvX64.dsc
> @@ -159,7 +159,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.dsc b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
> index 182ec3705d..6623196c8b 100644
> --- a/OvmfPkg/IntelTdx/IntelTdxX64.dsc
> +++ b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
> @@ -146,7 +146,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc
> index 0f26f2a9a9..c76a135f9e 100644
> --- a/OvmfPkg/Microvm/MicrovmX64.dsc
> +++ b/OvmfPkg/Microvm/MicrovmX64.dsc
> @@ -157,7 +157,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> index fcd3a3fda5..a850465e77 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -162,7 +162,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> index d0ae0b996d..9c6615b487 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -167,7 +167,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
> index a6811eee55..9e054aa489 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -179,7 +179,7 @@
>    PciCapLib|OvmfPkg/Library/BasePciCapLib/BasePciCapLib.inf
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc
> index ccd3a873c7..ab4bdb2628 100644
> --- a/OvmfPkg/OvmfXen.dsc
> +++ b/OvmfPkg/OvmfXen.dsc
> @@ -150,7 +150,7 @@
>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
> --
> 2.31.1.windows.1
>
>
>
> 
>
>


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



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

* Re: [edk2-devel] [PATCH 5/7] OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
  2023-10-27  5:42 ` [edk2-devel] [PATCH 5/7] OvmfPkg: Add CcProbeLib in PlatformInitLib.inf duntan
@ 2023-10-30 14:37   ` Ard Biesheuvel
  0 siblings, 0 replies; 27+ messages in thread
From: Ard Biesheuvel @ 2023-10-30 14:37 UTC (permalink / raw)
  To: Dun Tan
  Cc: devel, Ard Biesheuvel, Jiewen Yao, Jordan Justen, Gerd Hoffmann,
	Ray Ni

On Fri, 27 Oct 2023 at 07:43, Dun Tan <dun.tan@intel.com> wrote:
>
> PlatformInitLib uses the CcProbe API in MemDetect.c
> but doensn't add CcProbeLib in .inf LibraryClasses
> section. Add CcProbeLib to fix the build error.
>
> Signed-off-by: Dun Tan <dun.tan@intel.com>
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Cc: Jordan Justen <jordan.l.justen@intel.com>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Ray Ni <ray.ni@intel.com>

Reviewed-by: Ard Biesheuvel <ardb@kernel.org>

> ---
>  OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf
> index 5a79d95b68..8ff9e699b1 100644
> --- a/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf
> +++ b/OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf
> @@ -2,7 +2,7 @@
>  #  Platform Initialization Lib
>  #
>  #  This module provides platform specific function to detect boot mode.
> -#  Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
> +#  Copyright (c) 2006 - 2023, Intel Corporation. All rights reserved.<BR>
>  #
>  #  SPDX-License-Identifier: BSD-2-Clause-Patent
>  #
> @@ -52,6 +52,7 @@
>    PcdLib
>    PciLib
>    PeiHardwareInfoLib
> +  CcProbeLib
>
>  [LibraryClasses.X64]
>    TdxLib
> --
> 2.31.1.windows.1
>


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



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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-28 11:40             ` Laszlo Ersek
@ 2023-10-31  9:56               ` duntan
  2023-10-31 17:06                 ` Laszlo Ersek
  0 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-10-31  9:56 UTC (permalink / raw)
  To: Laszlo Ersek, devel@edk2.groups.io, thomas.lendacky@amd.com,
	leo.duran@amd.com, brijesh.singh@amd.com, Chang, Abner,
	michael.roth@amd.com, Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

Hi Tom,
Thanks for your testing and comments. I'll modify the patch commit message and code according to your comments. 
Yes the patch changes the behavior for IoReadFifo/ IoWriteFifo API for non-Tdx and non-SEV case. Looking forward to more comments from the community.

Hi Laszlo,
May I know the actually performance gap data in the case that you mentioned? 
Also, if a DEBUG binary is used, I think the boot time impact might be acceptable?

Thanks,
Dun

-----Original Message-----
From: Laszlo Ersek <lersek@redhat.com> 
Sent: Saturday, October 28, 2023 7:40 PM
To: devel@edk2.groups.io; thomas.lendacky@amd.com; Tan, Dun <dun.tan@intel.com>; leo.duran@amd.com; brijesh.singh@amd.com; Chang, Abner <abner.chang@amd.com>; michael.roth@amd.com; Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>
Cc: Ni, Ray <ray.ni@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>
Subject: Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev

On 10/27/23 23:31, Lendacky, Thomas via groups.io wrote:
> On 10/27/23 03:05, Tan, Dun wrote:
>> Hi all,
>>
>> Could you please help to review this patch set? In this patch set, 
>> the IoLib instance BaseIoLibIntrinsic is modified to support AMD SEV 
>> feature and the BaseIoLibIntrinsicSev is removed.
>> Also could you help to do a test on AMD processor to make sure that 
>> the SEV feature still works good with this patch set?
> 
> I was able to test SEV, SEV-ES and SEV-SNP guests successfully at each 
> step of the patchset.
> 
> However, you are unrolling the string I/O for everyone, now, not just 
> SEV guests. Is that acceptable to the community?

Thank you for making this comment, Tom, because this is exactly what I meant to raise immediately, upon reading the cover letter.

No, it is not acceptable.

The FIFO variants exist for a reason. When the guest performs multiple individual IO Port accesses, those translate to individual traps to the hypervisor, with significant performance impact. When IO Port string operations are used instead, with the REP prefix, then there is just
*one* trap, and the hypervisor can perform the whole "string" transfer in one go (up to a page size, anyways, IIRC). This has very visible impact on OVMF debug output (via the isa-debugcon QEMU device), and/or in case fw_cfg is used without DMA support.

(If you search OvmfPkg for IoReadFifo8 and IoWriteFifo8, you'll find the QemuFwCfgLib and PlatformDebugLibIoPort libraries using them.)

In fact, during initial SEV enablement, the SEV enlightenment was introduced because SEV does not handle the REP prefix with these instructions, and so a fallback had to be added.

See commits b6d11d7c4678 ("MdePkg: BaseIoLibIntrinsic (IoLib class) library", 2017-04-13) and 97353a9c914d ("OvmfPkg: Update dsc to use IoLib from BaseIoLibIntrinsicSev.inf", 2017-07-10).

Accordingly, there's a *huge* performance (boot time) impact when you boot OVMF in a SEV guest with DEBUG_VERBOSE messages enabled (and captured; i.e., when the isa-debugcon device is active).

> I think there need to
> be comments in IoLibFifo.c around the new code about why the access is 
> unrolled/looping so that someone down the road doesn't come along and 
> try to use string I/O again.

String IO must be preserved for such guests that don't run in Confidential Virtual Machines ("CVM"s).

In particular patches #6 and #7 would damage OVMF.

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

Laszlo

> 
> From a commit message standpoint, you have up to 74 characters per 
> line to use and I see most of your messages do not make use of that. 
> Also, you use sev when it should be SEV. Using SEV will make grep'ing 
> commit messages simpler.
> 
> Thanks,
> Tom
> 
>>
>> Thanks,
>> Dun
>>
>> -----Original Message-----
>> From: Tan, Dun
>> Sent: Friday, October 27, 2023 3:35 PM
>> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>
>> Thanks for the suggestion.
>> I'll update the test result once I finished the test. Also the 
>> abstract message in this patch has been modified to mention that this 
>> patch should not be merged now.
>>
>> Thanks,
>> Dun
>>
>> -----Original Message-----
>> From: Yao, Jiewen <jiewen.yao@intel.com>
>> Sent: Friday, October 27, 2023 3:07 PM
>> To: Tan, Dun <dun.tan@intel.com>; devel@edk2.groups.io
>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>
>> Here is my suggestion:
>>
>> 1) Please perform the test to ensure the functional part is correct.
>>
>> Without that, how can people know you are doing things right?
>>
>> 2) If you do not run any test, before you send out patch, please call 
>> out that clearly.
>> That is important to reminder the maintainer: Don't merge, even if it 
>> pass review.
>>
>> Otherwise, once the review passed, the maintainer may merge it.
>> I don't think that is the intention.
>>
>>
>>
>> Thank you
>> Yao, Jiewen
>>  
>>> -----Original Message-----
>>> From: Tan, Dun <dun.tan@intel.com>
>>> Sent: Friday, October 27, 2023 2:32 PM
>>> To: Yao, Jiewen <jiewen.yao@intel.com>; devel@edk2.groups.io
>>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
>>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>>
>>> Hi Jiewen,
>>>
>>> Currently I'm working on the Tdx test. Since the patch set doesn't 
>>> change the code logic when Tdx or SEV is enabled, so I want to send 
>>> out the patch as soon as possible to see if there is any comments 
>>> from community.
>>>
>>> I will include AMD SEV reviewer in this patch series. Thanks for 
>>> reminding.
>>>
>>> Thanks,
>>> Dun
>>>
>>> -----Original Message-----
>>> From: Yao, Jiewen <jiewen.yao@intel.com>
>>> Sent: Friday, October 27, 2023 1:49 PM
>>> To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>
>>> Subject: RE: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
>>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
>>>
>>> HI
>>> Since this impact TDX and SEV, would you please let me know what 
>>> kind of test you have done?
>>> Have you validated TDX and SEV before you submit the patch? Please 
>>> describe that clearly in your patch description.
>>>
>>> Also please include AMD SEV reviewer in this patch series.
>>>
>>> Thank you
>>> Yao, Jiewen
>>>
>>>> -----Original Message-----
>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of 
>>>> duntan
>>>> Sent: Friday, October 27, 2023 1:43 PM
>>>> To: devel@edk2.groups.io
>>>> Subject: [edk2-devel] [PATCH 0/7] Support Tdx and sev in 
>>>> BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev (Don't merge 
>>>> because the test hasn't been completed yet.)
>>>>
>>>> The goal is to have single BaseIoLibIntrinsic instance that can 
>>>> also used for sev and Tdx.
>>>> In this patch set, string I/O instructions are deleted in 
>>>> IoRead/WriteFifo API.
>>>> Then change the source file of BaseIoLibIntrinsic to also support 
>>>> Tdx and sev feature. So BaseIoLibIntrinsicSev and related assembly 
>>>> code can be
>>> removed.
>>>>
>>>> Dun Tan (7):
>>>>    MdePkg: Create TdxLibNull.inf instance
>>>>    MdePkg: Add CcProbeLibNull and TdxLibNull implement
>>>>    MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c
>>>>    MdePkg:support Tdx and sev in BaseIoLibIntrinsic
>>>>    OvmfPkg: Add CcProbeLib in PlatformInitLib.inf
>>>>    OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
>>>>    MdePkg:remove BaseIoLibIntrinsicSev related code
>>>>
>>>>   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf    |  14
>>>> ++++++++++---
>>> -
>>>>   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf |  61
>>>> ------------------
>>>> -------------------------------------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm          | 131
>>>> -----------------
>>> ---
>>>> -------------------------------------------------------------------
>>>> -
>>>> --
>>>> ----------------------------
>>>> -------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm       | 293
>>>> ---------------
>>> ---
>>>> -------------------------------------------------------------------
>>>> -
>>>> --
>>>> ----------------------------
>>>> -------------------------------------------------------------------
>>>> -
>>>> --
>>>> ----------------------------
>>>> -------------------------------------------------------------------
>>>> ------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/IoLibFifo.c               |  45
>>>> +++++++++++++++++++++++++++++++++++++--------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h                | 166
>>>> ----------------------
>>> --
>>>> -------------------------------------------------------------------
>>>> -
>>>> --
>>>> ----------------------------
>>>> --------------------------------------------
>>>>   MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm           | 120
>>>> ------------------
>>> --
>>>> -------------------------------------------------------------------
>>>> -
>>>> --
>>>> ----------------------------
>>>> --
>>>>   MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm        | 282
>>>> ----------------
>>> --
>>>> -------------------------------------------------------------------
>>>> -
>>>> --
>>>> ----------------------------
>>>> -------------------------------------------------------------------
>>>> -
>>>> --
>>>> ----------------------------
>>>> -------------------------------------------------------------------
>>>> -
>>>>   MdePkg/Library/TdxLib/TdxLibNull.inf                        |  21
>>>> +++++++++++++++++++++
>>>>   MdePkg/MdeLibs.dsc.inc                                      |   4
>>>> +++-
>>>>   MdePkg/MdePkg.dsc                                           |   2 
>>>> +-
>>>>   OvmfPkg/AmdSev/AmdSevX64.dsc                                |   2 
>>>> +-
>>>>   OvmfPkg/Bhyve/BhyveX64.dsc                                  |   2 
>>>> +-
>>>>   OvmfPkg/CloudHv/CloudHvX64.dsc                              |   2 
>>>> +-
>>>>   OvmfPkg/IntelTdx/IntelTdxX64.dsc                            |   2 
>>>> +-
>>>>   OvmfPkg/Library/PlatformInitLib/PlatformInitLib.inf         |   3 
>>>> ++-
>>>>   OvmfPkg/Microvm/MicrovmX64.dsc                              |   2 
>>>> +-
>>>>   OvmfPkg/OvmfPkgIa32.dsc                                     |   2 
>>>> +-
>>>>   OvmfPkg/OvmfPkgIa32X64.dsc                                  |   2 
>>>> +-
>>>>   OvmfPkg/OvmfPkgX64.dsc                                      |   2 
>>>> +-
>>>>   OvmfPkg/OvmfXen.dsc                                         |   2 
>>>> +-
>>>>   21 files changed, 83 insertions(+), 1077 deletions(-)  delete 
>>>> mode
>>>> 100644 MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifo.nasm
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm
>>>>   delete mode 100644 MdePkg/Library/BaseIoLibIntrinsic/IoLibSev.h
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifo.nasm
>>>>   delete mode 100644
>>>> MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm
>>>>   create mode 100644 MdePkg/Library/TdxLib/TdxLibNull.inf
>>>>
>>>> --
>>>> 2.31.1.windows.1
>>>>
>>>>
>>>>
>>>>
>>>>
>>
> 
> 
> 
> 
> 



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



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

* Re: [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
  2023-10-30 14:36   ` Ard Biesheuvel
@ 2023-10-31 12:30     ` Laszlo Ersek
  2023-10-31 13:19       ` Ard Biesheuvel
  0 siblings, 1 reply; 27+ messages in thread
From: Laszlo Ersek @ 2023-10-31 12:30 UTC (permalink / raw)
  To: devel, ardb, dun.tan
  Cc: Ard Biesheuvel, Jiewen Yao, Jordan Justen, Gerd Hoffmann, Ray Ni

On 10/30/23 15:36, Ard Biesheuvel wrote:
> On Fri, 27 Oct 2023 at 07:43, duntan <dun.tan@intel.com> wrote:
>>
>> Use BaseIoLibIntrinsic.inf in dsc files. The
>> BaseIoLibIntrinsic supports Tdx and sev now.
>> The BaseIoLibIntrinsicSev will be removed in
>> the following patches.
>>
>> Signed-off-by: Dun Tan <dun.tan@intel.com>
>> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
>> Cc: Jiewen Yao <jiewen.yao@intel.com>
>> Cc: Jordan Justen <jordan.l.justen@intel.com>
>> Cc: Gerd Hoffmann <kraxel@redhat.com>
>> Cc: Ray Ni <ray.ni@intel.com>
> 
> Reviewed-by: Ard Biesheuvel <ardb@kernel.org>

While I agree that this patch *in itself* is (quite obviously) formally
correct, semantically it is wrong for OVMF; which is why I have NACKed
the whole series; see <https://edk2.groups.io/g/devel/message/110242>.

(Just highlighting it here too, lest it get lost in the review thread.)

Thanks,
Laszlo

>> ---
>>  OvmfPkg/AmdSev/AmdSevX64.dsc     | 2 +-
>>  OvmfPkg/Bhyve/BhyveX64.dsc       | 2 +-
>>  OvmfPkg/CloudHv/CloudHvX64.dsc   | 2 +-
>>  OvmfPkg/IntelTdx/IntelTdxX64.dsc | 2 +-
>>  OvmfPkg/Microvm/MicrovmX64.dsc   | 2 +-
>>  OvmfPkg/OvmfPkgIa32.dsc          | 2 +-
>>  OvmfPkg/OvmfPkgIa32X64.dsc       | 2 +-
>>  OvmfPkg/OvmfPkgX64.dsc           | 2 +-
>>  OvmfPkg/OvmfXen.dsc              | 2 +-
>>  9 files changed, 9 insertions(+), 9 deletions(-)
>>
>> diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc
>> index 302c90e7c2..06086e0cc5 100644
>> --- a/OvmfPkg/AmdSev/AmdSevX64.dsc
>> +++ b/OvmfPkg/AmdSev/AmdSevX64.dsc
>> @@ -142,7 +142,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc
>> index 6693342c5f..1376dd7468 100644
>> --- a/OvmfPkg/Bhyve/BhyveX64.dsc
>> +++ b/OvmfPkg/Bhyve/BhyveX64.dsc
>> @@ -149,7 +149,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/CloudHv/CloudHvX64.dsc b/OvmfPkg/CloudHv/CloudHvX64.dsc
>> index 35942e02df..1d2a13dd92 100644
>> --- a/OvmfPkg/CloudHv/CloudHvX64.dsc
>> +++ b/OvmfPkg/CloudHv/CloudHvX64.dsc
>> @@ -159,7 +159,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.dsc b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
>> index 182ec3705d..6623196c8b 100644
>> --- a/OvmfPkg/IntelTdx/IntelTdxX64.dsc
>> +++ b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
>> @@ -146,7 +146,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|OvmfPkg/Library/CcProbeLib/DxeCcProbeLib.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc
>> index 0f26f2a9a9..c76a135f9e 100644
>> --- a/OvmfPkg/Microvm/MicrovmX64.dsc
>> +++ b/OvmfPkg/Microvm/MicrovmX64.dsc
>> @@ -157,7 +157,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
>> index fcd3a3fda5..a850465e77 100644
>> --- a/OvmfPkg/OvmfPkgIa32.dsc
>> +++ b/OvmfPkg/OvmfPkgIa32.dsc
>> @@ -162,7 +162,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
>> index d0ae0b996d..9c6615b487 100644
>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
>> @@ -167,7 +167,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
>> index a6811eee55..9e054aa489 100644
>> --- a/OvmfPkg/OvmfPkgX64.dsc
>> +++ b/OvmfPkg/OvmfPkgX64.dsc
>> @@ -179,7 +179,7 @@
>>    PciCapLib|OvmfPkg/Library/BasePciCapLib/BasePciCapLib.inf
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc
>> index ccd3a873c7..ab4bdb2628 100644
>> --- a/OvmfPkg/OvmfXen.dsc
>> +++ b/OvmfPkg/OvmfXen.dsc
>> @@ -150,7 +150,7 @@
>>    PciCapPciSegmentLib|OvmfPkg/Library/BasePciCapPciSegmentLib/BasePciCapPciSegmentLib.inf
>>    PciCapPciIoLib|OvmfPkg/Library/UefiPciCapPciIoLib/UefiPciCapPciIoLib.inf
>>    CcProbeLib|MdePkg/Library/CcProbeLibNull/CcProbeLibNull.inf
>> -  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsicSev.inf
>> +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
>>    OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
>>    SerialPortLib|PcAtChipsetPkg/Library/SerialIoLib/SerialIoLib.inf
>>    MtrrLib|UefiCpuPkg/Library/MtrrLib/MtrrLib.inf
>> --
>> 2.31.1.windows.1
>>
>>
>>
>>
>>
>>
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110407): https://edk2.groups.io/g/devel/message/110407
Mute This Topic: https://groups.io/mt/102215668/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] 27+ messages in thread

* Re: [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files
  2023-10-31 12:30     ` Laszlo Ersek
@ 2023-10-31 13:19       ` Ard Biesheuvel
  0 siblings, 0 replies; 27+ messages in thread
From: Ard Biesheuvel @ 2023-10-31 13:19 UTC (permalink / raw)
  To: Laszlo Ersek
  Cc: devel, dun.tan, Ard Biesheuvel, Jiewen Yao, Jordan Justen,
	Gerd Hoffmann, Ray Ni

On Tue, 31 Oct 2023 at 13:30, Laszlo Ersek <lersek@redhat.com> wrote:
>
> On 10/30/23 15:36, Ard Biesheuvel wrote:
> > On Fri, 27 Oct 2023 at 07:43, duntan <dun.tan@intel.com> wrote:
> >>
> >> Use BaseIoLibIntrinsic.inf in dsc files. The
> >> BaseIoLibIntrinsic supports Tdx and sev now.
> >> The BaseIoLibIntrinsicSev will be removed in
> >> the following patches.
> >>
> >> Signed-off-by: Dun Tan <dun.tan@intel.com>
> >> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
> >> Cc: Jiewen Yao <jiewen.yao@intel.com>
> >> Cc: Jordan Justen <jordan.l.justen@intel.com>
> >> Cc: Gerd Hoffmann <kraxel@redhat.com>
> >> Cc: Ray Ni <ray.ni@intel.com>
> >
> > Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
>
> While I agree that this patch *in itself* is (quite obviously) formally
> correct, semantically it is wrong for OVMF; which is why I have NACKed
> the whole series; see <https://edk2.groups.io/g/devel/message/110242>.
>
> (Just highlighting it here too, lest it get lost in the review thread.)
>

Apologies, I missed that.


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



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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-31  9:56               ` duntan
@ 2023-10-31 17:06                 ` Laszlo Ersek
  2023-10-31 22:36                   ` Laszlo Ersek
  0 siblings, 1 reply; 27+ messages in thread
From: Laszlo Ersek @ 2023-10-31 17:06 UTC (permalink / raw)
  To: devel, dun.tan, thomas.lendacky@amd.com, leo.duran@amd.com,
	brijesh.singh@amd.com, Chang, Abner, michael.roth@amd.com,
	Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

On 10/31/23 10:56, duntan wrote:
> Hi Tom,
> Thanks for your testing and comments. I'll modify the patch commit
> message and code according to your comments.
> Yes the patch changes the behavior for IoReadFifo/ IoWriteFifo API for
> non-Tdx and non-SEV case. Looking forward to more comments from the
> community.
>
> Hi Laszlo,
> May I know the actually performance gap data in the case that you
> mentioned?

Good call to have me measure this.

I cannot reproduce the performance hit *at all* with the isa-debugcon
device (that is, through the OVMF debug log).

I built OVMF X64 with PcdDebugPrintErrorLevel set to 0x8040004F, at
commit a671a14e63fd. That was the baseline. I built both NOOPT and
DEBUG.

Then I repeated the same, with your patches applied.

I cannot show any human-perceptible boot time difference.

Note that the NOOPT comparison excludes LTO (i.e., compiler advances) as
the potential factor that might mask the impact of your patches. I also
disassembled some binaries producing debug output, and indeed, without
your patches, we have rep outsb in them, and with your patches, we
don't. Yet, there is no performance difference.

This is striking news.

I want to understand why we have thought thus far that individual IO
Port traps are extremely expensive. I've now found evidence going back
as far as 2012 -- the year when I joined edk2!

Here are some facts:


(1) in commit f1ec65ba24e1 ("OvmfPkg: Add QemuFwCfgLib library class and
implementation", 2012-05-30) -- note the date! --, Jordan added the
initial implementation of QemuFwCfgLib. That version already used an
open-coded IoReadFifo8 function.

There was no particular explanation captured in the commit message.

I also happen to have the entire 2012 edk2-devel mailing list traffic
saved locally (well, the messages posted after I joined), and the
discussions around the various versions of the patch in question don't
seem to specifically justify the REP variant. So, we cannot conclude
much from this piece of evidence.


(2) Then I decided to search that entire year's traffic (i.e., 2012's)
for the word "fifo". I found relevant hits:

- In commit 1fd376d97922 ("PcAtChipsetPkg/PciHostBridgeDxe: Improve KVM
  FIFO I/O read/write performance", 2012-06-01) -- note the year again!
  --, Jordan brought the FIFO variants to the
  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL implementation in edk2. The code was
  duplicated.

  Note that Jordan clearly stated in the commit message:

> KVM can substantially boost the speed of the rep insb/insw/insl
> and rep outsb/outsw/outsl instructions by transferring up to
> a page of data per VM trap.

- On the same day when Jordan posted the patch that would become
  above-noted commit 1fd376d97922, Jordan also asked on the list
  (subject "IoLib I/O FIFO read/write routines"):

> Regarding the routines now defined in PcAtChipsetPkg/PciHostBridgeDxe/IoFifo.h.
> IoReadFifo8, IoReadFifo16, IoReadFifo32,
> IoWriteFifo8, IoWriteFifo16, and IoWriteFifo32
>
> Would it make sense to consider adding these to MdePkg/Include/Library/IoLib.h?

  Again, this was still in 2012.

So here we can conclude that Jordan saw some specific perf boost due to
employing the FIFO variants in EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL, but the
use case was not documented.


(3) During all this discussion here, I have been *distinctly* recalling
that I've experienced an *actual performance regression* sometime, after
we had unwittingly switched from the REP variant to the non-REP variant.

And now I have actually found it. I'm going to quote the commit message
in full:

> commit fb8b54694c53e73e1b6a098686e908f54f9bb7a9
> Author: Laszlo Ersek <lersek@redhat.com>
> Date:   Thu Apr 7 22:28:38 2016 +0200
>
>     UefiCpuPkg: CpuIo2Dxe: optimize FIFO reads and writes of IO ports
>
>     * Short description:
>
>       The CpuIoServiceRead() and CpuIoServiceWrite() functions transfer data
>       between memory and IO ports with individual Io(Read|Write)(8|16|32)
>       function calls, each in an appropriately set up loop.
>
>       On the Ia32 and X64 platforms however, FIFO reads and writes can be
>       optimized, by coding them in assembly, and delegating the loop to the
>       CPU, with the REP prefix.
>
>       On KVM virtualization hosts, this difference has a huge performance
>       impact: if the loop is open-coded, then the virtual machine traps to the
>       hypervisor on every single UINT8 / UINT16 / UINT32 transfer, whereas
>       with the REP prefix, KVM can transfer up to a page of data per VM trap.
>       This is especially noticeable with IDE PIO transfers, where all the data
>       are squeezed through IO ports.
>
>     * Long description:
>
>       The RootBridgeIoIoRW() function in
>
>         PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c
>
>       used to have the exact same IO port acces optimization, dating back
>       verbatim to commit 1fd376d9792:
>
>         PcAtChipsetPkg/PciHostBridgeDxe: Improve KVM FIFO I/O read/write
>           performance
>
>       OvmfPkg cloned the "PcAtChipsetPkg/PciHostBridgeDxe" driver (for
>       unrelated reasons), and inherited the optimization from PcAtChipsetPkg.
>
>       The "PcAtChipsetPkg/PciHostBridgeDxe" driver was ultimately removed in
>       commit 111d79db47:
>
>         PcAtChipsetPkg/PciHostBridge: Remove PciHostBridge driver
>
>       and OvmfPkg too was rebased to the new core Pci Host Bridge Driver, in
>       commit 4014885ffd:
>
>         OvmfPkg: switch to MdeModulePkg/Bus/Pci/PciHostBridgeDxe
>
>       This caused the optimization to go lost. Namely, the
>       RootBridgeIoIoRead() and RootBridgeIoIoWrite() functions in the new core
>       Pci Host Bridge Driver delegate IO port accesses to
>       EFI_CPU_IO2_PROTOCOL. And, in OvmfPkg (and likely most other Ia32 / X64
>       edk2 platforms), this protocol is provided by "UefiCpuPkg/CpuIo2Dxe",
>       which lacks the optimization.
>
>       Therefore, this patch ports the C source code logic from commit
>       1fd376d9792 (see above) to "UefiCpuPkg/CpuIo2Dxe", plus it ports the
>       NASM-converted assembly helper functions from OvmfPkg commits
>       6026bf460037 and ace1d0517b65:
>
>         OvmfPkg PciHostBridgeDxe: Convert Ia32/IoFifo.asm to NASM
>
>         OvmfPkg PciHostBridgeDxe: Convert X64/IoFifo.asm to NASM
>
>       In order to support the MSFT and INTEL toolchains as well, the *.asm
>       files are ported from OvmfPkg as well, immediately from before the above
>       conversion (that is, at 6026bf460037^).
>
>     * Notes about the port:
>
>       - The write and read branches from commit 1fd376d9792 are split to the
>         separate functions CpuIoServiceWrite() and CpuIoServiceRead().
>
>       - The EfiPciWidthUintXX constants are replaced with EfiCpuIoWidthUintXX.
>
>       - The cast expression "(UINTN) Address" is replaced with
>         "(UINTN)Address" (i.e., no space), because that's how the receiving
>         functions spell it as well.
>
>       - The labels in the switch statements are unindented by one level, to
>         match the edk2 coding style (and the rest of UefiCpuPkg) better.
>
>     * The first signoff belongs to Jordan, because he authored all of
>       1fd376d9792, 6026bf460037 and ace1d0517b65.
>
>     Contributed-under: TianoCore Contribution Agreement 1.0
>     Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
>     Contributed-under: TianoCore Contribution Agreement 1.0
>     Signed-off-by: Laszlo Ersek <lersek@redhat.com>
>     Ref: https://www.redhat.com/archives/vfio-users/2016-April/msg00029.html
>     Reported-by: Mark <kram321@gmail.com>
>     Ref: http://thread.gmane.org/gmane.comp.bios.edk2.devel/10424/focus=10432
>     Reported-by: Jordan Justen <jordan.l.justen@intel.com>
>     Cc: Jordan Justen <jordan.l.justen@intel.com>
>     Cc: Ruiyu Ni <ruiyu.ni@intel.com>
>     Cc: Jeff Fan <jeff.fan@intel.com>
>     Cc: Mark <kram321@gmail.com>
>     Tested-by: Mark <kram321@gmail.com>
>     Reviewed-by: Jeff Fan <jeff.fan@intel.com>

This is "hard evidence". Per bullet (2), Jordan had added the FIFO / REP
variants to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL, for some (non-specific)
performance boost. and when that optimization was later lost, due to a
mistake, we saw IDE PIO performance *tank* on QEMU/KVM.

Therefore, I am now being reminded that the best performance regression
test for this particular series is to boot an operating system using IDE
(PIO) emulation, with OVMF! Because CpuIo2Dxe still calls the FIFO APIs.

That's what I'm going to do next -- later this week, if everything goes
well. I ask for your patience until I complete that regression test.


(4) In commit 19c6d9feaaf8 ("MdePkg: Expand BaseIoLibIntrinsic (IoLib
class) library", 2017-01-17), the duplicated FIFO variants were
upstreamed to the IoLib instance(s) in MdePkg.

Subsequently, commit b6d11d7c4678 ("MdePkg: BaseIoLibIntrinsic (IoLib
class) library", 2017-04-13) introduced the SEV fallback.

And then commit 97353a9c914d ("OvmfPkg: Update dsc to use IoLib from
BaseIoLibIntrinsicSev.inf", 2017-07-10) put the SEV fallback to use in
OVMF.

In commit 80886a695377 ("OvmfPkg/PlatformDebugLibIoPort: write messages
with IoWriteFifo8()", 2017-09-11), we switched PlatformDebugLibIoPort as
well over to the REP variant (which had been by then centralized). In
fact, using the REP fifo write in OVMF's DebugLib instance was
recommended by Jordan already in 2012! He wrote (while reviewing the
patch that would become commit b90aefa9e46c, "OvmfPkg: add support for
debug console on port 0x402", 2012-07-26):

> I'm not certain, but I think it might be worth-while to make the
> str-len call, and then use the I/O fifo call.
>
> It could reduce the trapping count by ~30x for writing a debug string,
> and we do write quite a lot of DEBUG... (I'm not sure it is enough to
> make a noticeable difference though.)

So that was what commit 80886a695377 implemented some five years later,
citing that "In the general case this speeds up logging".


(5) I also distinctly remember witnessing the debug logging speed
difference between SEV and non-SEV guests. (Well, this is not a "fact",
but a memory.)

In commit c09d9571300a ("OvmfPkg: save on I/O port accesses when the
debug port is not in use", 2017-11-17), we even quantified this. The
commit message says, "therefore, in SEV guests, the boot time impact is
huge (about 45 seconds _additional_ time spent writing to the debug
port)".


So, minimally commit fb8b54694c53 from bullet (3) is *hard evidence*
that this difference in performance used to exist, regardless of SEV.

As I said above, I will try to retest the same use case soon, with this
patch set. If the performance difference turns out to be invisible now,
then I can only chalk that up to QEMU/KVM technology having advanced a
lot -- and in that case, I will rescind my NACK.

To summarize, my operating memory was correct, and I wasn't wrong to
NACK this patch set; at the same time, you are also very correct to
point out that we need to measure *afresh*.

Back to your email:

On 10/31/23 10:56, duntan wrote:
> Also, if a DEBUG binary is used, I think the boot time impact might be
> acceptable?

We exclusively build and ship DEBUG binaries. RELEASE binaries contain
no ASSERTs. Many edk2 core modules -- unfortunately -- only employ
ASSERTs as error checks, so a RELEASE build means that those core
modules are built without error checks. Which is unacceptable.

(But even if all those modules had proper, explicit error checking, we'd
still want to preserve all the ASSERT()s.)

I'll report back later with the IDE PIO performance test results.

Thanks,
Laszlo



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110436): https://edk2.groups.io/g/devel/message/110436
Mute This Topic: https://groups.io/mt/102215661/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] 27+ messages in thread

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-31 17:06                 ` Laszlo Ersek
@ 2023-10-31 22:36                   ` Laszlo Ersek
  2023-11-02  8:49                     ` duntan
  0 siblings, 1 reply; 27+ messages in thread
From: Laszlo Ersek @ 2023-10-31 22:36 UTC (permalink / raw)
  To: devel, dun.tan, thomas.lendacky@amd.com, leo.duran@amd.com,
	brijesh.singh@amd.com, Chang, Abner, michael.roth@amd.com,
	Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

On 10/31/23 18:06, Laszlo Ersek wrote:

> (3) During all this discussion here, I have been *distinctly*
> recalling that I've experienced an *actual performance regression*
> sometime, after we had unwittingly switched from the REP variant to
> the non-REP variant.
>
> And now I have actually found it. I'm going to quote the commit
> message in full:
>
>> commit fb8b54694c53e73e1b6a098686e908f54f9bb7a9
>> Author: Laszlo Ersek <lersek@redhat.com>
>> Date:   Thu Apr 7 22:28:38 2016 +0200
>>
>>     UefiCpuPkg: CpuIo2Dxe: optimize FIFO reads and writes of IO ports
>>
>>     * Short description:
>>
>>       The CpuIoServiceRead() and CpuIoServiceWrite() functions transfer data
>>       between memory and IO ports with individual Io(Read|Write)(8|16|32)
>>       function calls, each in an appropriately set up loop.
>>
>>       On the Ia32 and X64 platforms however, FIFO reads and writes can be
>>       optimized, by coding them in assembly, and delegating the loop to the
>>       CPU, with the REP prefix.
>>
>>       On KVM virtualization hosts, this difference has a huge performance
>>       impact: if the loop is open-coded, then the virtual machine traps to the
>>       hypervisor on every single UINT8 / UINT16 / UINT32 transfer, whereas
>>       with the REP prefix, KVM can transfer up to a page of data per VM trap.
>>       This is especially noticeable with IDE PIO transfers, where all the data
>>       are squeezed through IO ports.
>>
>>     * Long description:
>>
>>       The RootBridgeIoIoRW() function in
>>
>>         PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c
>>
>>       used to have the exact same IO port acces optimization, dating back
>>       verbatim to commit 1fd376d9792:
>>
>>         PcAtChipsetPkg/PciHostBridgeDxe: Improve KVM FIFO I/O read/write
>>           performance
>>
>>       OvmfPkg cloned the "PcAtChipsetPkg/PciHostBridgeDxe" driver (for
>>       unrelated reasons), and inherited the optimization from PcAtChipsetPkg.
>>
>>       The "PcAtChipsetPkg/PciHostBridgeDxe" driver was ultimately removed in
>>       commit 111d79db47:
>>
>>         PcAtChipsetPkg/PciHostBridge: Remove PciHostBridge driver
>>
>>       and OvmfPkg too was rebased to the new core Pci Host Bridge Driver, in
>>       commit 4014885ffd:
>>
>>         OvmfPkg: switch to MdeModulePkg/Bus/Pci/PciHostBridgeDxe
>>
>>       This caused the optimization to go lost. Namely, the
>>       RootBridgeIoIoRead() and RootBridgeIoIoWrite() functions in the new core
>>       Pci Host Bridge Driver delegate IO port accesses to
>>       EFI_CPU_IO2_PROTOCOL. And, in OvmfPkg (and likely most other Ia32 / X64
>>       edk2 platforms), this protocol is provided by "UefiCpuPkg/CpuIo2Dxe",
>>       which lacks the optimization.
>>
>>       Therefore, this patch ports the C source code logic from commit
>>       1fd376d9792 (see above) to "UefiCpuPkg/CpuIo2Dxe", plus it ports the
>>       NASM-converted assembly helper functions from OvmfPkg commits
>>       6026bf460037 and ace1d0517b65:
>>
>>         OvmfPkg PciHostBridgeDxe: Convert Ia32/IoFifo.asm to NASM
>>
>>         OvmfPkg PciHostBridgeDxe: Convert X64/IoFifo.asm to NASM
>>
>>       In order to support the MSFT and INTEL toolchains as well, the *.asm
>>       files are ported from OvmfPkg as well, immediately from before the above
>>       conversion (that is, at 6026bf460037^).
>>
>>     * Notes about the port:
>>
>>       - The write and read branches from commit 1fd376d9792 are split to the
>>         separate functions CpuIoServiceWrite() and CpuIoServiceRead().
>>
>>       - The EfiPciWidthUintXX constants are replaced with EfiCpuIoWidthUintXX.
>>
>>       - The cast expression "(UINTN) Address" is replaced with
>>         "(UINTN)Address" (i.e., no space), because that's how the receiving
>>         functions spell it as well.
>>
>>       - The labels in the switch statements are unindented by one level, to
>>         match the edk2 coding style (and the rest of UefiCpuPkg) better.
>>
>>     * The first signoff belongs to Jordan, because he authored all of
>>       1fd376d9792, 6026bf460037 and ace1d0517b65.
>>
>>     Contributed-under: TianoCore Contribution Agreement 1.0
>>     Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
>>     Contributed-under: TianoCore Contribution Agreement 1.0
>>     Signed-off-by: Laszlo Ersek <lersek@redhat.com>
>>     Ref: https://www.redhat.com/archives/vfio-users/2016-April/msg00029.html
>>     Reported-by: Mark <kram321@gmail.com>
>>     Ref: http://thread.gmane.org/gmane.comp.bios.edk2.devel/10424/focus=10432
>>     Reported-by: Jordan Justen <jordan.l.justen@intel.com>
>>     Cc: Jordan Justen <jordan.l.justen@intel.com>
>>     Cc: Ruiyu Ni <ruiyu.ni@intel.com>
>>     Cc: Jeff Fan <jeff.fan@intel.com>
>>     Cc: Mark <kram321@gmail.com>
>>     Tested-by: Mark <kram321@gmail.com>
>>     Reviewed-by: Jeff Fan <jeff.fan@intel.com>
>
> This is "hard evidence". Per bullet (2), Jordan had added the FIFO /
> REP variants to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL, for some
> (non-specific) performance boost. and when that optimization was later
> lost, due to a mistake, we saw IDE PIO performance *tank* on QEMU/KVM.
>
> Therefore, I am now being reminded that the best performance
> regression test for this particular series is to boot an operating
> system using IDE (PIO) emulation, with OVMF! Because CpuIo2Dxe still
> calls the FIFO APIs.
>
> That's what I'm going to do next -- later this week, if everything
> goes well. I ask for your patience until I complete that regression
> test.

Thankfully, we captured the original bug report in the commit message
above, in the first "Ref:" tag. That link still works today, and it is
helpful for setting up a reproducer.

So, this is my reproducer:

(0) The QEMU version is a recent development version (built at git
commit a95260486aa7, "Merge tag 'pull-tcg-20231023' of
https://gitlab.com/rth7680/qemu into staging", 2023-10-23).

My host kernel (KVM) is from RHEL-9.2: version
5.14.0-284.30.1.el9_2.x86_64.

(1) build OVMF X64 for the DEBUG target

(2) launch QEMU as follows:

qemu-system-x86_64 \
  -M pc \
  -enable-kvm \
  -m 4096 \
  -drive if=pflash,format=raw,unit=0,file=OVMF_CODE.4m.fd,readonly=on \
  -drive if=pflash,format=raw,unit=1,file=OVMF_VARS.4m.fd,snapshot=on \
  -debugcon file:debug.log \
  -global isa-debugcon.iobase=0x402 \
  -cdrom en-us_windows_server_2019_updated_aug_2021_x64_dvd_a6431a28.iso

The original bug report used a Windows 7 installer ISO; my reproducer
uses a more recent Windows ISO: Windows Server 2019.

Steps (1) and (2) were once performed at current edk2 master
(ccbe2e938386), and then another time with this patch series applied on
top.

When the Windows ISO boots, and I hit Enter to confirm booting from the
ISO, two "Loading files..." progress bars are displayed, one after the
other. I measured the duration of these progress bars, in both
scenarios.

With OVMF built at edk2 master,

- the first "Loading files..." progress bar is hardly noticeable to the
  human eye,

- the second "Loading files..." progress bar takes 28 seconds to
  complete.

With this patch set applied on top of master,

- the first "Loading files..." progress bar takes 2.3 seconds,

- the second "Loading files..." progress bar takes 7 minutes and 44.4
  seconds (464.4 seconds), meaning a slowdown factor of ~16.5.

So... please don't merge this. The bottleneck still exists. We still
need the "rep outsb" optimization on KVM.

Thanks,
Laszlo



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110455): https://edk2.groups.io/g/devel/message/110455
Mute This Topic: https://groups.io/mt/102215661/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] 27+ messages in thread

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-10-31 22:36                   ` Laszlo Ersek
@ 2023-11-02  8:49                     ` duntan
  2023-11-02 10:42                       ` Laszlo Ersek
  0 siblings, 1 reply; 27+ messages in thread
From: duntan @ 2023-11-02  8:49 UTC (permalink / raw)
  To: devel@edk2.groups.io, lersek@redhat.com, thomas.lendacky@amd.com,
	leo.duran@amd.com, brijesh.singh@amd.com, Chang, Abner,
	michael.roth@amd.com, Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

Laszlo,

Thanks for your thorough and detailed research on this topic. With the test result that you reproduced, I agree with your opinion.
So this patch set will be dropped and I'll raise another new patch set. In the new patch set, I'll only change the code for BaseIoLibIntrinsic instance and leave the BaseIoLibIntrinsicSev as it was.

Thanks,
Dun

-----Original Message-----
From: Laszlo Ersek <lersek@redhat.com> 
Sent: Wednesday, November 1, 2023 6:37 AM
To: devel@edk2.groups.io; Tan, Dun <dun.tan@intel.com>; thomas.lendacky@amd.com; leo.duran@amd.com; brijesh.singh@amd.com; Chang, Abner <abner.chang@amd.com>; michael.roth@amd.com; Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>
Cc: Ni, Ray <ray.ni@intel.com>; Yao, Jiewen <jiewen.yao@intel.com>
Subject: Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev

On 10/31/23 18:06, Laszlo Ersek wrote:

> (3) During all this discussion here, I have been *distinctly* 
> recalling that I've experienced an *actual performance regression* 
> sometime, after we had unwittingly switched from the REP variant to 
> the non-REP variant.
>
> And now I have actually found it. I'm going to quote the commit 
> message in full:
>
>> commit fb8b54694c53e73e1b6a098686e908f54f9bb7a9
>> Author: Laszlo Ersek <lersek@redhat.com>
>> Date:   Thu Apr 7 22:28:38 2016 +0200
>>
>>     UefiCpuPkg: CpuIo2Dxe: optimize FIFO reads and writes of IO ports
>>
>>     * Short description:
>>
>>       The CpuIoServiceRead() and CpuIoServiceWrite() functions transfer data
>>       between memory and IO ports with individual Io(Read|Write)(8|16|32)
>>       function calls, each in an appropriately set up loop.
>>
>>       On the Ia32 and X64 platforms however, FIFO reads and writes can be
>>       optimized, by coding them in assembly, and delegating the loop to the
>>       CPU, with the REP prefix.
>>
>>       On KVM virtualization hosts, this difference has a huge performance
>>       impact: if the loop is open-coded, then the virtual machine traps to the
>>       hypervisor on every single UINT8 / UINT16 / UINT32 transfer, whereas
>>       with the REP prefix, KVM can transfer up to a page of data per VM trap.
>>       This is especially noticeable with IDE PIO transfers, where all the data
>>       are squeezed through IO ports.
>>
>>     * Long description:
>>
>>       The RootBridgeIoIoRW() function in
>>
>>         PcAtChipsetPkg/PciHostBridgeDxe/PciRootBridgeIo.c
>>
>>       used to have the exact same IO port acces optimization, dating back
>>       verbatim to commit 1fd376d9792:
>>
>>         PcAtChipsetPkg/PciHostBridgeDxe: Improve KVM FIFO I/O read/write
>>           performance
>>
>>       OvmfPkg cloned the "PcAtChipsetPkg/PciHostBridgeDxe" driver (for
>>       unrelated reasons), and inherited the optimization from PcAtChipsetPkg.
>>
>>       The "PcAtChipsetPkg/PciHostBridgeDxe" driver was ultimately removed in
>>       commit 111d79db47:
>>
>>         PcAtChipsetPkg/PciHostBridge: Remove PciHostBridge driver
>>
>>       and OvmfPkg too was rebased to the new core Pci Host Bridge Driver, in
>>       commit 4014885ffd:
>>
>>         OvmfPkg: switch to MdeModulePkg/Bus/Pci/PciHostBridgeDxe
>>
>>       This caused the optimization to go lost. Namely, the
>>       RootBridgeIoIoRead() and RootBridgeIoIoWrite() functions in the new core
>>       Pci Host Bridge Driver delegate IO port accesses to
>>       EFI_CPU_IO2_PROTOCOL. And, in OvmfPkg (and likely most other Ia32 / X64
>>       edk2 platforms), this protocol is provided by "UefiCpuPkg/CpuIo2Dxe",
>>       which lacks the optimization.
>>
>>       Therefore, this patch ports the C source code logic from commit
>>       1fd376d9792 (see above) to "UefiCpuPkg/CpuIo2Dxe", plus it ports the
>>       NASM-converted assembly helper functions from OvmfPkg commits
>>       6026bf460037 and ace1d0517b65:
>>
>>         OvmfPkg PciHostBridgeDxe: Convert Ia32/IoFifo.asm to NASM
>>
>>         OvmfPkg PciHostBridgeDxe: Convert X64/IoFifo.asm to NASM
>>
>>       In order to support the MSFT and INTEL toolchains as well, the *.asm
>>       files are ported from OvmfPkg as well, immediately from before the above
>>       conversion (that is, at 6026bf460037^).
>>
>>     * Notes about the port:
>>
>>       - The write and read branches from commit 1fd376d9792 are split to the
>>         separate functions CpuIoServiceWrite() and CpuIoServiceRead().
>>
>>       - The EfiPciWidthUintXX constants are replaced with EfiCpuIoWidthUintXX.
>>
>>       - The cast expression "(UINTN) Address" is replaced with
>>         "(UINTN)Address" (i.e., no space), because that's how the receiving
>>         functions spell it as well.
>>
>>       - The labels in the switch statements are unindented by one level, to
>>         match the edk2 coding style (and the rest of UefiCpuPkg) better.
>>
>>     * The first signoff belongs to Jordan, because he authored all of
>>       1fd376d9792, 6026bf460037 and ace1d0517b65.
>>
>>     Contributed-under: TianoCore Contribution Agreement 1.0
>>     Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
>>     Contributed-under: TianoCore Contribution Agreement 1.0
>>     Signed-off-by: Laszlo Ersek <lersek@redhat.com>
>>     Ref: https://www.redhat.com/archives/vfio-users/2016-April/msg00029.html
>>     Reported-by: Mark <kram321@gmail.com>
>>     Ref: http://thread.gmane.org/gmane.comp.bios.edk2.devel/10424/focus=10432
>>     Reported-by: Jordan Justen <jordan.l.justen@intel.com>
>>     Cc: Jordan Justen <jordan.l.justen@intel.com>
>>     Cc: Ruiyu Ni <ruiyu.ni@intel.com>
>>     Cc: Jeff Fan <jeff.fan@intel.com>
>>     Cc: Mark <kram321@gmail.com>
>>     Tested-by: Mark <kram321@gmail.com>
>>     Reviewed-by: Jeff Fan <jeff.fan@intel.com>
>
> This is "hard evidence". Per bullet (2), Jordan had added the FIFO / 
> REP variants to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL, for some
> (non-specific) performance boost. and when that optimization was later 
> lost, due to a mistake, we saw IDE PIO performance *tank* on QEMU/KVM.
>
> Therefore, I am now being reminded that the best performance 
> regression test for this particular series is to boot an operating 
> system using IDE (PIO) emulation, with OVMF! Because CpuIo2Dxe still 
> calls the FIFO APIs.
>
> That's what I'm going to do next -- later this week, if everything 
> goes well. I ask for your patience until I complete that regression 
> test.

Thankfully, we captured the original bug report in the commit message above, in the first "Ref:" tag. That link still works today, and it is helpful for setting up a reproducer.

So, this is my reproducer:

(0) The QEMU version is a recent development version (built at git commit a95260486aa7, "Merge tag 'pull-tcg-20231023' of https://gitlab.com/rth7680/qemu into staging", 2023-10-23).

My host kernel (KVM) is from RHEL-9.2: version 5.14.0-284.30.1.el9_2.x86_64.

(1) build OVMF X64 for the DEBUG target

(2) launch QEMU as follows:

qemu-system-x86_64 \
  -M pc \
  -enable-kvm \
  -m 4096 \
  -drive if=pflash,format=raw,unit=0,file=OVMF_CODE.4m.fd,readonly=on \
  -drive if=pflash,format=raw,unit=1,file=OVMF_VARS.4m.fd,snapshot=on \
  -debugcon file:debug.log \
  -global isa-debugcon.iobase=0x402 \
  -cdrom en-us_windows_server_2019_updated_aug_2021_x64_dvd_a6431a28.iso

The original bug report used a Windows 7 installer ISO; my reproducer uses a more recent Windows ISO: Windows Server 2019.

Steps (1) and (2) were once performed at current edk2 master (ccbe2e938386), and then another time with this patch series applied on top.

When the Windows ISO boots, and I hit Enter to confirm booting from the ISO, two "Loading files..." progress bars are displayed, one after the other. I measured the duration of these progress bars, in both scenarios.

With OVMF built at edk2 master,

- the first "Loading files..." progress bar is hardly noticeable to the
  human eye,

- the second "Loading files..." progress bar takes 28 seconds to
  complete.

With this patch set applied on top of master,

- the first "Loading files..." progress bar takes 2.3 seconds,

- the second "Loading files..." progress bar takes 7 minutes and 44.4
  seconds (464.4 seconds), meaning a slowdown factor of ~16.5.

So... please don't merge this. The bottleneck still exists. We still need the "rep outsb" optimization on KVM.

Thanks,
Laszlo



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



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

* Re: [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev
  2023-11-02  8:49                     ` duntan
@ 2023-11-02 10:42                       ` Laszlo Ersek
  0 siblings, 0 replies; 27+ messages in thread
From: Laszlo Ersek @ 2023-11-02 10:42 UTC (permalink / raw)
  To: Tan, Dun, devel@edk2.groups.io, thomas.lendacky@amd.com,
	leo.duran@amd.com, brijesh.singh@amd.com, Chang, Abner,
	michael.roth@amd.com, Attar, AbdulLateef (Abdul Lateef)
  Cc: Ni, Ray, Yao, Jiewen

On 11/2/23 09:49, Tan, Dun wrote:
> Laszlo,
> 
> Thanks for your thorough and detailed research on this topic. With the test result that you reproduced, I agree with your opinion.
> So this patch set will be dropped and I'll raise another new patch set. In the new patch set, I'll only change the code for BaseIoLibIntrinsic instance and leave the BaseIoLibIntrinsicSev as it was.

Thanks!
Laszlo



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110520): https://edk2.groups.io/g/devel/message/110520
Mute This Topic: https://groups.io/mt/102215661/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] 27+ messages in thread

end of thread, other threads:[~2023-11-02 10:42 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-27  5:42 [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev duntan
2023-10-27  5:42 ` [edk2-devel] [PATCH 1/7] MdePkg: Create TdxLibNull.inf instance duntan
2023-10-27  5:54   ` Ni, Ray
2023-10-27  5:56     ` Ni, Ray
2023-10-27  6:32       ` duntan
2023-10-27  5:42 ` [edk2-devel] [PATCH 2/7] MdePkg: Add CcProbeLibNull and TdxLibNull implement duntan
2023-10-27  5:42 ` [edk2-devel] [PATCH 3/7] MdePkg: simplify IoRead/WriteFifo in IoLibFifo.c duntan
2023-10-27  5:42 ` [edk2-devel] [PATCH 4/7] MdePkg:support Tdx and sev in BaseIoLibIntrinsic duntan
2023-10-27  5:42 ` [edk2-devel] [PATCH 5/7] OvmfPkg: Add CcProbeLib in PlatformInitLib.inf duntan
2023-10-30 14:37   ` Ard Biesheuvel
2023-10-27  5:42 ` [edk2-devel] [PATCH 6/7] OvmfPkg: use BaseIoLibIntrinsic.inf in dsc files duntan
2023-10-30 14:36   ` Ard Biesheuvel
2023-10-31 12:30     ` Laszlo Ersek
2023-10-31 13:19       ` Ard Biesheuvel
2023-10-27  5:43 ` [edk2-devel] [PATCH 7/7] MdePkg:remove BaseIoLibIntrinsicSev related code duntan
2023-10-27  5:49 ` [edk2-devel] [PATCH 0/7] Support Tdx and sev in BaseIoLibIntrinsic and remove BaseIoLibIntrinsicSev Yao, Jiewen
2023-10-27  6:31   ` duntan
2023-10-27  7:06     ` Yao, Jiewen
2023-10-27  7:34       ` duntan
2023-10-27  8:05         ` duntan
2023-10-27 21:31           ` Lendacky, Thomas via groups.io
2023-10-28 11:40             ` Laszlo Ersek
2023-10-31  9:56               ` duntan
2023-10-31 17:06                 ` Laszlo Ersek
2023-10-31 22:36                   ` Laszlo Ersek
2023-11-02  8:49                     ` duntan
2023-11-02 10:42                       ` Laszlo Ersek

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