On 6/19/20 2:47 AM, Dong, Eric via groups.io wrote:


-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
Lendacky, Thomas
Sent: Thursday, June 18, 2020 10:09 PM
To: Dong, Eric <eric.d...@intel.com>; devel@edk2.groups.io
Cc: Brijesh Singh <brijesh.si...@amd.com>; Ard Biesheuvel
<ard.biesheu...@arm.com>; Justen, Jordan L <jordan.l.jus...@intel.com>;
Laszlo Ersek <ler...@redhat.com>; Gao, Liming <liming....@intel.com>;
Kinney, Michael D <michael.d.kin...@intel.com>; Ni, Ray <ray...@intel.com>
Subject: Re: [edk2-devel] [PATCH v9 08/46] UefiCpuPkg: Implement library
support for VMGEXIT

On 6/18/20 2:23 AM, Dong, Eric wrote:
Hi Tom,

When use VS2015 to build this code, it reports below error. Please help to
fix it.

k:\edk2\UefiCpuPkg\Include\Library/VmgExitLib.h: error C2220: warning
treated as error - no 'object' file generated
k:\edk2\UefiCpuPkg\Include\Library/VmgExitLib.h: warning C4335: Mac
file format detected: please convert the source file to either DOS or
UNIX format

That is strange...  I didn't see this when I ran through the CI. When I do a 
file
command against the file it reports:

UefiCpuPkg/Include/Library/VmgExitLib.h: C source, ASCII text, with CRLF
line terminators

I'll investigate this and try and figure out what's going on, but if anyone else
has some ideas, please let me know.

Hi Tom,

I met this error again when I trig below patch from AMD again for CPU change.
"UefiCpuPkg: Move StandardSignatureIsAuthenticAMD to BaseUefiCpuLib"

Hmmm... I think we could be running into issues with sending patches through our mail servers. Let me send you the patch series directly using some changes I made to my git config file to see if that helps. Would that be ok?

Thanks,
Tom


I'm not sure whether this is patch issue, or our internal test sever issue. I 
have reported this error to our internal team to check also.
Please check it from your side and make sure no error from your side. I will 
update the status from my side when I get the update.

Thanks,
Eric


Thanks,
Tom


Thanks,
Eric

-----Original Message-----
From: Tom Lendacky <thomas.lenda...@amd.com>
Sent: Friday, June 5, 2020 9:27 PM
To: devel@edk2.groups.io
Cc: Brijesh Singh <brijesh.si...@amd.com>; Ard Biesheuvel
<ard.biesheu...@arm.com>; Dong, Eric <eric.d...@intel.com>; Justen,
Jordan L <jordan.l.jus...@intel.com>; Laszlo Ersek
<ler...@redhat.com>; Gao, Liming <liming....@intel.com>; Kinney,
Michael D <michael.d.kin...@intel.com>; Ni, Ray <ray...@intel.com>
Subject: [PATCH v9 08/46] UefiCpuPkg: Implement library support for
VMGEXIT

BZ:

https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbug

zilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2198&amp;data=02%7C01%7Ct
ho

mas.lendacky%40amd.com%7Cd75554da4959407c967608d8135877be%7C3dd
8961fe

4884e608e11a82d994e183d%7C0%7C0%7C637280617975250842&amp;sdata=
fBlK2B
FkRdAS5EWcM8YShf1ZswfRN%2F41L7XeUsb4ZCs%3D&amp;reserved=0

To support handling #VC exceptions and issuing VMGEXIT instructions,
create a library with functions that can be used to perform these
#VC/VMGEXIT related operations. This includes functions for:
    - Handling #VC exceptions
    - Preparing for and issuing a VMGEXIT
    - Performing MMIO-related write operations to support flash emulation
    - Performing AP related boot opeations

The base functions in this driver will not do anything and will
return an error if a return value is required. It is expected that
other packages (like OvmfPkg) will create a version of the library to
fully support an SEV-ES guest.

Cc: Eric Dong <eric.d...@intel.com>
Cc: Ray Ni <ray...@intel.com>
Cc: Laszlo Ersek <ler...@redhat.com>
Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com>
---
   UefiCpuPkg/UefiCpuPkg.dec                            |   3 +
   UefiCpuPkg/UefiCpuPkg.dsc                            |   2 +
   UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf |  27 +++++
   UefiCpuPkg/Include/Library/VmgExitLib.h              | 103
+++++++++++++++++
   UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c   | 121
++++++++++++++++++++
   UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni |  15 +++
   6 files changed, 271 insertions(+)

diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec
index df5d02bae6b4..cb92f34b6f55 100644
--- a/UefiCpuPkg/UefiCpuPkg.dec
+++ b/UefiCpuPkg/UefiCpuPkg.dec
@@ -53,6 +53,9 @@ [LibraryClasses.IA32, LibraryClasses.X64]
     ##

     MpInitLib|Include/Library/MpInitLib.h



+  ##  @libraryclass  Provides function to support VMGEXIT processing.

+  VmgExitLib|Include/Library/VmgExitLib.h

+

   [Guids]

     gUefiCpuPkgTokenSpaceGuid      = { 0xac05bf33, 0x995a, 0x4ed4, { 0xaa,
0xb8, 0xef, 0x7a, 0xe8, 0xf, 0x5c, 0xb0 }}

     gMsegSmramGuid                 = { 0x5802bce4, 0xeeee, 0x4e33, { 0xa1, 
0x30,
0xeb, 0xad, 0x27, 0xf0, 0xe4, 0x39 }}

diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc
index afa304128221..f0e58b90ff0a 100644
--- a/UefiCpuPkg/UefiCpuPkg.dsc
+++ b/UefiCpuPkg/UefiCpuPkg.dsc
@@ -56,6 +56,7 @@ [LibraryClasses]


PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/Base
PeCoffGetEntryPointLib.inf



PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/Base
PeCoffExtraActionLib|P
eCoffExtraActionLibNull.inf



TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/Tp
mMeasurementLibNull.inf

+  VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf



   [LibraryClasses.common.SEC]



PlatformSecLib|UefiCpuPkg/Library/PlatformSecLibNull/PlatformSecLibNu
PlatformSecLib|ll.i
nf

@@ -143,6 +144,7 @@ [Components.IA32, Components.X64]


UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLib
Null.inf

     UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf

     UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf

+  UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf

     UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf

     UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf

     UefiCpuPkg/SecCore/SecCore.inf

diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf
b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf
new file mode 100644
index 000000000000..d8770a21c355
--- /dev/null
+++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf
@@ -0,0 +1,27 @@
+## @file

+#  VMGEXIT Support Library.

+#

+#  Copyright (C) 2020, Advanced Micro Devices, Inc. All rights
+reserved.<BR>

+#  SPDX-License-Identifier: BSD-2-Clause-Patent

+#

+##

+

+[Defines]

+  INF_VERSION                    = 0x00010005

+  BASE_NAME                      = VmgExitLibNull

+  MODULE_UNI_FILE                = VmgExitLibNull.uni

+  FILE_GUID                      = 3cd7368f-ef9b-4a9b-9571-2ed93813677e

+  MODULE_TYPE                    = BASE

+  VERSION_STRING                 = 1.0

+  LIBRARY_CLASS                  = VmgExitLib

+

+[Sources.common]

+  VmgExitLibNull.c

+

+[Packages]

+  MdePkg/MdePkg.dec

+  UefiCpuPkg/UefiCpuPkg.dec

+

+[LibraryClasses]

+  BaseLib

+

diff --git a/UefiCpuPkg/Include/Library/VmgExitLib.h
b/UefiCpuPkg/Include/Library/VmgExitLib.h
new file mode 100644
index 000000000000..0b2f39026a4a
--- /dev/null
+++ b/UefiCpuPkg/Include/Library/VmgExitLib.h
@@ -0,0 +1,103 @@
+/** @file

+  Public header file for the VMGEXIT Support library class.

+

+  This library class defines some routines used when invoking the
+ VMGEXIT

+  instruction in support of SEV-ES and to handle #VC exceptions.

+

+  Copyright (C) 2020, Advanced Micro Devices, Inc. All rights
+ reserved.<BR>

+  SPDX-License-Identifier: BSD-2-Clause-Patent

+

+**/

+

+#ifndef __VMG_EXIT_LIB_H__

+#define __VMG_EXIT_LIB_H__

+

+#include <Protocol/DebugSupport.h>

+#include <Register/Amd/Ghcb.h>

+

+

+/**

+  Perform VMGEXIT.

+

+  Sets the necessary fields of the GHCB, invokes the VMGEXIT
+ instruction
and

+  then handles the return actions.

+

+  @param[in, out]  Ghcb       A pointer to the GHCB

+  @param[in]       ExitCode   VMGEXIT code to be assigned to the
SwExitCode

+                              field of the GHCB.

+  @param[in]       ExitInfo1  VMGEXIT information to be assigned to the

+                              SwExitInfo1 field of the GHCB.

+  @param[in]       ExitInfo2  VMGEXIT information to be assigned to the

+                              SwExitInfo2 field of the GHCB.

+

+  @return  0                  VMGEXIT succeeded.

+  @return  Others             VMGEXIT processing did not succeed. Exception

+                              number to be propagated.

+

+**/

+UINT64

+EFIAPI

+VmgExit (

+  IN OUT GHCB                *Ghcb,

+  IN     UINT64              ExitCode,

+  IN     UINT64              ExitInfo1,

+  IN     UINT64              ExitInfo2

+  );

+

+/**

+  Perform pre-VMGEXIT initialization/preparation.

+

+  Performs the necessary steps in preparation for invoking VMGEXIT.
+ Must
be

+  called before setting any fields within the GHCB.

+

+  @param[in, out]  Ghcb       A pointer to the GHCB

+

+**/

+VOID

+EFIAPI

+VmgInit (

+  IN OUT GHCB                *Ghcb

+  );

+

+/**

+  Perform post-VMGEXIT cleanup.

+

+  Performs the necessary steps to cleanup after invoking VMGEXIT.
+ Must be

+  called after obtaining needed fields within the GHCB.

+

+  @param[in, out]  Ghcb       A pointer to the GHCB

+

+**/

+VOID

+EFIAPI

+VmgDone (

+  IN OUT GHCB                *Ghcb

+  );

+

+/**

+  Handle a #VC exception.

+

+  Performs the necessary processing to handle a #VC exception.

+

+  The base library function returns an error equal to VC_EXCEPTION,

+  to be propagated to the standard exception handling stack.

+

+  @param[in, out]  ExceptionType  Pointer to an EFI_EXCEPTION_TYPE
+ to be
set

+                                  as value to use on error.

+  @param[in, out]  SystemContext  Pointer to EFI_SYSTEM_CONTEXT

+

+  @retval  EFI_SUCCESS            Exception handled

+  @retval  EFI_UNSUPPORTED        #VC not supported, (new) exception
value to

+                                  propagate provided

+  @retval  EFI_PROTOCOL_ERROR     #VC handling failed, (new) exception
value to

+                                  propagate provided

+

+**/

+EFI_STATUS

+EFIAPI

+VmgExitHandleVc (

+  IN OUT EFI_EXCEPTION_TYPE  *ExceptionType,

+  IN OUT EFI_SYSTEM_CONTEXT  SystemContext

+  );

+

+#endif

diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c
b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c
new file mode 100644
index 000000000000..30a239df298e
--- /dev/null
+++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c
@@ -0,0 +1,121 @@
+/** @file

+  VMGEXIT Base Support Library.

+

+  Copyright (C) 2020, Advanced Micro Devices, Inc. All rights
+ reserved.<BR>

+  SPDX-License-Identifier: BSD-2-Clause-Patent

+

+**/

+

+#include <Base.h>

+#include <Uefi.h>

+#include <Library/VmgExitLib.h>

+

+/**

+  Perform VMGEXIT.

+

+  Sets the necessary fields of the GHCB, invokes the VMGEXIT
+ instruction
and

+  then handles the return actions.

+

+  The base library function returns an error in the form of a

+  GHCB_EVENT_INJECTION representing a GP_EXCEPTION.

+

+  @param[in, out]  Ghcb       A pointer to the GHCB

+  @param[in]       ExitCode   VMGEXIT code to be assigned to the
SwExitCode

+                              field of the GHCB.

+  @param[in]       ExitInfo1  VMGEXIT information to be assigned to the

+                              SwExitInfo1 field of the GHCB.

+  @param[in]       ExitInfo2  VMGEXIT information to be assigned to the

+                              SwExitInfo2 field of the GHCB.

+

+  @return  0                  VMGEXIT succeeded.

+  @return  Others             VMGEXIT processing did not succeed. Exception

+                              event to be propagated.

+

+**/

+UINT64

+EFIAPI

+VmgExit (

+  IN OUT GHCB                *Ghcb,

+  IN     UINT64              ExitCode,

+  IN     UINT64              ExitInfo1,

+  IN     UINT64              ExitInfo2

+  )

+{

+  GHCB_EVENT_INJECTION  Event;

+

+  Event.Uint64 = 0;

+  Event.Elements.Vector = GP_EXCEPTION;

+  Event.Elements.Type   = GHCB_EVENT_INJECTION_TYPE_EXCEPTION;

+  Event.Elements.Valid  = 1;

+

+  return Event.Uint64;

+}

+

+/**

+  Perform pre-VMGEXIT initialization/preparation.

+

+  Performs the necessary steps in preparation for invoking VMGEXIT.
+ Must
be

+  called before setting any fields within the GHCB.

+

+  The base library function does nothing.

+

+  @param[in, out]  Ghcb       A pointer to the GHCB

+

+**/

+VOID

+EFIAPI

+VmgInit (

+  IN OUT GHCB                *Ghcb

+  )

+{

+}

+

+/**

+  Perform post-VMGEXIT cleanup.

+

+  Performs the necessary steps to cleanup after invoking VMGEXIT.
+ Must be

+  called after obtaining needed fields within the GHCB.

+

+  The base library function does nothing.

+

+  @param[in, out]  Ghcb       A pointer to the GHCB

+

+**/

+VOID

+EFIAPI

+VmgDone (

+  IN OUT GHCB                *Ghcb

+  )

+{

+}

+

+/**

+  Handle a #VC exception.

+

+  Performs the necessary processing to handle a #VC exception.

+

+  The base library function returns an error equal to VC_EXCEPTION,

+  to be propagated to the standard exception handling stack.

+

+  @param[in, out]  ExceptionType  Pointer to an EFI_EXCEPTION_TYPE
+ to be
set

+                                  as value to use on error.

+  @param[in, out]  SystemContext  Pointer to EFI_SYSTEM_CONTEXT

+

+  @retval  EFI_SUCCESS            Exception handled

+  @retval  EFI_UNSUPPORTED        #VC not supported, (new) exception
value to

+                                  propagate provided

+  @retval  EFI_PROTOCOL_ERROR     #VC handling failed, (new) exception
value to

+                                  propagate provided

+

+**/

+EFI_STATUS

+EFIAPI

+VmgExitHandleVc (

+  IN OUT EFI_EXCEPTION_TYPE  *ExceptionType,

+  IN OUT EFI_SYSTEM_CONTEXT  SystemContext

+  )

+{

+  *ExceptionType = VC_EXCEPTION;

+

+  return EFI_UNSUPPORTED;

+}

diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni
b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni
new file mode 100644
index 000000000000..8639bc0e8ce9
--- /dev/null
+++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni
@@ -0,0 +1,15 @@
+// /** @file

+// VMGEXIT support library instance.

+//

+// VMGEXIT support library instance.

+//

+// Copyright (C) 2020, Advanced Micro Devices, Inc. All rights
+reserved.<BR>

+// SPDX-License-Identifier: BSD-2-Clause-Patent

+//

+// **/

+

+

+#string STR_MODULE_ABSTRACT             #language en-US "VMGEXIT
support
NULL library instance"

+

+#string STR_MODULE_DESCRIPTION          #language en-US "VMGEXIT
support NULL library instance."

+

--
2.27.0







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

View/Reply Online (#61518): https://edk2.groups.io/g/devel/message/61518
Mute This Topic: https://groups.io/mt/74692413/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to