> -----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" 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&data=02%7C01%7Ct > ho > >> > mas.lendacky%40amd.com%7Cd75554da4959407c967608d8135877be%7C3dd > 8961fe > >> > 4884e608e11a82d994e183d%7C0%7C0%7C637280617975250842&sdata= > fBlK2B > >> FkRdAS5EWcM8YShf1ZswfRN%2F41L7XeUsb4ZCs%3D&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 (#61512): https://edk2.groups.io/g/devel/message/61512 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] -=-=-=-=-=-=-=-=-=-=-=-