[edk2-devel] [PATCH v9 08/46] UefiCpuPkg: Implement library support for VMGEXIT
Dong, Eric
eric.dong at intel.com
Thu Jun 18 07:23:10 UTC 2020
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
Thanks,
Eric
> -----Original Message-----
> From: Tom Lendacky <thomas.lendacky at amd.com>
> Sent: Friday, June 5, 2020 9:27 PM
> To: devel at edk2.groups.io
> Cc: Brijesh Singh <brijesh.singh at amd.com>; Ard Biesheuvel
> <ard.biesheuvel at arm.com>; Dong, Eric <eric.dong at intel.com>; Justen,
> Jordan L <jordan.l.justen at intel.com>; Laszlo Ersek <lersek at redhat.com>;
> Gao, Liming <liming.gao at intel.com>; Kinney, Michael D
> <michael.d.kinney at intel.com>; Ni, Ray <ray.ni at intel.com>
> Subject: [PATCH v9 08/46] UefiCpuPkg: Implement library support for
> VMGEXIT
>
> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2198
>
> 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.dong at intel.com>
> Cc: Ray Ni <ray.ni at intel.com>
> Cc: Laszlo Ersek <lersek at redhat.com>
> Signed-off-by: Tom Lendacky <thomas.lendacky at 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/BaseP
> eCoffExtraActionLibNull.inf
>
>
> TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/Tp
> mMeasurementLibNull.inf
>
> + VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf
>
>
>
> [LibraryClasses.common.SEC]
>
>
> PlatformSecLib|UefiCpuPkg/Library/PlatformSecLibNull/PlatformSecLibNull.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 (#61468): https://edk2.groups.io/g/devel/message/61468
Mute This Topic: https://groups.io/mt/74692413/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list