[edk2-devel] [PATCH 5/5] CpuException: Add InitializeSeparateExceptionStacks
Wang, Jian J
jian.j.wang at intel.com
Sun May 22 16:05:13 UTC 2022
Reviewed-by: Jian J Wang <jian.j.wang at intel.com>
Regards,
Jian
> -----Original Message-----
> From: Ni, Ray <ray.ni at intel.com>
> Sent: Friday, May 20, 2022 10:16 PM
> To: devel at edk2.groups.io
> Cc: Dong, Eric <eric.dong at intel.com>; Wang, Jian J <jian.j.wang at intel.com>
> Subject: [PATCH 5/5] CpuException: Add InitializeSeparateExceptionStacks
>
> Today InitializeCpuExceptionHandlersEx is called from three modules:
> 1. DxeCore (links to DxeCpuExceptionHandlerLib)
> DxeCore expects it initializes the IDT entries as well as
> assigning separate stacks for #DF and #PF.
> 2. CpuMpPei (links to PeiCpuExceptionHandlerLib)
> and CpuDxe (links to DxeCpuExceptionHandlerLib)
> It's called for each thread for only assigning separate stacks for
> #DF and #PF. The IDT entries initialization is skipped because
> caller sets InitData->X64.InitDefaultHandlers to FALSE.
>
> Additionally, SecPeiCpuExceptionHandlerLib, SmmCpuExceptionHandlerLib
> also implement such API and the behavior of the API is simply to initialize
> IDT entries only.
>
> Because it mixes the IDT entries initialization and separate stacks
> assignment for certain exception handlers together, in order to know
> whether the function call only initializes IDT entries, or assigns stacks,
> we need to check:
> 1. value of InitData->X64.InitDefaultHandlers
> 2. library instance
>
> This patch cleans up the code to separate the stack assignment to a new API:
> InitializeSeparateExceptionStacks().
>
> Only when caller calls the new API, the separate stacks are assigned.
> With this change, the SecPei and Smm instance can return unsupported which
> gives caller a very clear status.
>
> The old API InitializeCpuExceptionHandlersEx() is removed in this patch.
> Because no platform module is consuming the old API, the impact is none.
>
> Signed-off-by: Ray Ni <ray.ni at intel.com>
> Cc: Eric Dong <eric.dong at intel.com>
> Cc: Jian J Wang <jian.j.wang at intel.com>
> ---
> MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 2 +-
> .../Include/Library/CpuExceptionHandlerLib.h | 24 ++---
> .../CpuExceptionHandlerLibNull.c | 26 ++----
> UefiCpuPkg/CpuDxe/CpuMp.c | 6 +-
> UefiCpuPkg/CpuMpPei/CpuMpPei.c | 4 +-
> .../CpuExceptionHandlerLib/DxeException.c | 91 ++++++-------------
> .../CpuExceptionHandlerLib/PeiCpuException.c | 51 ++---------
> .../SecPeiCpuException.c | 27 ++----
> .../CpuExceptionHandlerLib/SmmException.c | 27 ++----
> 9 files changed, 74 insertions(+), 184 deletions(-)
>
> diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> index 2c27fc0695..83f49d7c00 100644
> --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c
> @@ -253,7 +253,7 @@ DxeMain (
> VectorInfoList = (EFI_VECTOR_HANDOFF_INFO *)(GET_GUID_HOB_DATA
> (GuidHob));
>
> }
>
>
>
> - Status = InitializeCpuExceptionHandlersEx (VectorInfoList, NULL);
>
> + Status = InitializeCpuExceptionHandlers (VectorInfoList);
>
> ASSERT_EFI_ERROR (Status);
>
>
>
> //
>
> diff --git a/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> b/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> index d4649bebe1..9a495081f7 100644
> --- a/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> +++ b/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> @@ -103,32 +103,20 @@ InitializeCpuExceptionHandlers (
> );
>
>
>
> /**
>
> - Initializes all CPU exceptions entries with optional extra initializations.
>
> + Setup separate stacks for certain exception handlers.
>
>
>
> - By default, this method should include all functionalities implemented by
>
> - InitializeCpuExceptionHandlers(), plus extra initialization works, if any.
>
> - This could be done by calling InitializeCpuExceptionHandlers() directly
>
> - in this method besides the extra works.
>
> + InitData is optional and processor arch dependent.
>
>
>
> - InitData is optional and its use and content are processor arch dependent.
>
> - The typical usage of it is to convey resources which have to be reserved
>
> - elsewhere and are necessary for the extra initializations of exception.
>
> + @param[in] InitData Pointer to data optional for information about how
>
> + to assign stacks for certain exception handlers.
>
>
>
> - @param[in] VectorInfo Pointer to reserved vector list.
>
> - @param[in] InitData Pointer to data optional for extra initializations
>
> - of exception.
>
> -
>
> - @retval EFI_SUCCESS The exceptions have been successfully
>
> - initialized.
>
> - @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid
>
> - content.
>
> + @retval EFI_SUCCESS The stacks are assigned successfully.
>
> @retval EFI_UNSUPPORTED This function is not supported.
>
>
>
> **/
>
> EFI_STATUS
>
> EFIAPI
>
> -InitializeCpuExceptionHandlersEx (
>
> - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
>
> +InitializeSeparateExceptionStacks (
>
> IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
>
> );
>
>
>
> diff --git
> a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> Null.c
> b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> Null.c
> index 54f38788fe..8aeedcb4d1 100644
> ---
> a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> Null.c
> +++
> b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> Null.c
> @@ -82,34 +82,22 @@ DumpCpuContext (
> }
>
>
>
> /**
>
> - Initializes all CPU exceptions entries with optional extra initializations.
>
> + Setup separate stacks for certain exception handlers.
>
>
>
> - By default, this method should include all functionalities implemented by
>
> - InitializeCpuExceptionHandlers(), plus extra initialization works, if any.
>
> - This could be done by calling InitializeCpuExceptionHandlers() directly
>
> - in this method besides the extra works.
>
> + InitData is optional and processor arch dependent.
>
>
>
> - InitData is optional and its use and content are processor arch dependent.
>
> - The typical usage of it is to convey resources which have to be reserved
>
> - elsewhere and are necessary for the extra initializations of exception.
>
> + @param[in] InitData Pointer to data optional for information about how
>
> + to assign stacks for certain exception handlers.
>
>
>
> - @param[in] VectorInfo Pointer to reserved vector list.
>
> - @param[in] InitData Pointer to data optional for extra initializations
>
> - of exception.
>
> -
>
> - @retval EFI_SUCCESS The exceptions have been successfully
>
> - initialized.
>
> - @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid
>
> - content.
>
> + @retval EFI_SUCCESS The stacks are assigned successfully.
>
> @retval EFI_UNSUPPORTED This function is not supported.
>
>
>
> **/
>
> EFI_STATUS
>
> EFIAPI
>
> -InitializeCpuExceptionHandlersEx (
>
> - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
>
> +InitializeSeparateExceptionStacks (
>
> IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
>
> )
>
> {
>
> - return InitializeCpuExceptionHandlers (VectorInfo);
>
> + return EFI_UNSUPPORTED;
>
> }
>
> diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c
> index 1f218367b3..e385f585c7 100644
> --- a/UefiCpuPkg/CpuDxe/CpuMp.c
> +++ b/UefiCpuPkg/CpuDxe/CpuMp.c
> @@ -1,7 +1,7 @@
> /** @file
>
> CPU DXE Module to produce CPU MP Protocol.
>
>
>
> - Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR>
>
> + Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.<BR>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
>
>
> **/
>
> @@ -617,7 +617,7 @@ GetGdtr (
> /**
>
> Initializes CPU exceptions handlers for the sake of stack switch requirement.
>
>
>
> - This function is a wrapper of InitializeCpuExceptionHandlersEx. It's mainly
>
> + This function is a wrapper of InitializeSeparateExceptionStacks. It's mainly
>
> for the sake of AP's init because of EFI_AP_PROCEDURE API requirement.
>
>
>
> @param[in,out] Buffer The pointer to private data buffer.
>
> @@ -641,7 +641,7 @@ InitializeExceptionStackSwitchHandlers (
> AsmReadIdtr (&Idtr);
>
> EssData->Ia32.IdtTable = (VOID *)Idtr.Base;
>
> EssData->Ia32.IdtTableSize = Idtr.Limit + 1;
>
> - Status = InitializeCpuExceptionHandlersEx (NULL, EssData);
>
> + Status = InitializeSeparateExceptionStacks (EssData);
>
> ASSERT_EFI_ERROR (Status);
>
> }
>
>
>
> diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> index 1e68c91d95..d4786979fa 100644
> --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> @@ -432,7 +432,7 @@ GetGdtr (
> /**
>
> Initializes CPU exceptions handlers for the sake of stack switch requirement.
>
>
>
> - This function is a wrapper of InitializeCpuExceptionHandlersEx. It's mainly
>
> + This function is a wrapper of InitializeSeparateExceptionStacks. It's mainly
>
> for the sake of AP's init because of EFI_AP_PROCEDURE API requirement.
>
>
>
> @param[in,out] Buffer The pointer to private data buffer.
>
> @@ -456,7 +456,7 @@ InitializeExceptionStackSwitchHandlers (
> AsmReadIdtr (&Idtr);
>
> EssData->Ia32.IdtTable = (VOID *)Idtr.Base;
>
> EssData->Ia32.IdtTableSize = Idtr.Limit + 1;
>
> - Status = InitializeCpuExceptionHandlersEx (NULL, EssData);
>
> + Status = InitializeSeparateExceptionStacks (EssData);
>
> ASSERT_EFI_ERROR (Status);
>
> }
>
>
>
> diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> index c7c1fe31d2..e62bb5e6c0 100644
> --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> @@ -103,82 +103,49 @@ RegisterCpuInterruptHandler (
> }
>
>
>
> /**
>
> - Initializes CPU exceptions entries and setup stack switch for given exceptions.
>
> + Setup separate stacks for certain exception handlers.
>
>
>
> - This method will call InitializeCpuExceptionHandlers() to setup default
>
> - exception handlers unless indicated not to do it explicitly.
>
> + InitData is optional and processor arch dependent.
>
>
>
> - If InitData is passed with NULL, this method will use the resource reserved
>
> - by global variables to initialize it; Otherwise it will use data in InitData
>
> - to setup stack switch. This is for the different use cases in DxeCore and
>
> - Cpu MP exception initialization.
>
> + @param[in] InitData Pointer to data optional for information about how
>
> + to assign stacks for certain exception handlers.
>
>
>
> - @param[in] VectorInfo Pointer to reserved vector list.
>
> - @param[in] InitData Pointer to data required to setup stack switch for
>
> - given exceptions.
>
> -
>
> - @retval EFI_SUCCESS The exceptions have been successfully
>
> - initialized.
>
> - @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid
>
> - content.
>
> + @retval EFI_SUCCESS The stacks are assigned successfully.
>
> + @retval EFI_UNSUPPORTED This function is not supported.
>
>
>
> **/
>
> EFI_STATUS
>
> EFIAPI
>
> -InitializeCpuExceptionHandlersEx (
>
> - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
>
> +InitializeSeparateExceptionStacks (
>
> IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
>
> )
>
> {
>
> - EFI_STATUS Status;
>
> CPU_EXCEPTION_INIT_DATA EssData;
>
> IA32_DESCRIPTOR Idtr;
>
> IA32_DESCRIPTOR Gdtr;
>
>
>
> - //
>
> - // To avoid repeat initialization of default handlers, the caller should pass
>
> - // an extended init data with InitDefaultHandlers set to FALSE. There's no
>
> - // need to call this method to just initialize default handlers. Call non-ex
>
> - // version instead; or this method must be implemented as a simple wrapper
> of
>
> - // non-ex version of it, if this version has to be called.
>
> - //
>
> - if ((InitData == NULL) || InitData->X64.InitDefaultHandlers) {
>
> - Status = InitializeCpuExceptionHandlers (VectorInfo);
>
> - } else {
>
> - Status = EFI_SUCCESS;
>
> - }
>
> -
>
> - if (!EFI_ERROR (Status)) {
>
> - //
>
> - // Initializing stack switch is only necessary for Stack Guard functionality.
>
> - //
>
> - if (PcdGetBool (PcdCpuStackGuard)) {
>
> - if (InitData == NULL) {
>
> - SetMem (mNewGdt, sizeof (mNewGdt), 0);
>
> -
>
> - AsmReadIdtr (&Idtr);
>
> - AsmReadGdtr (&Gdtr);
>
> -
>
> - EssData.X64.Revision = CPU_EXCEPTION_INIT_DATA_REV;
>
> - EssData.X64.KnownGoodStackTop = (UINTN)mNewStack + sizeof
> (mNewStack);
>
> - EssData.X64.KnownGoodStackSize =
> CPU_KNOWN_GOOD_STACK_SIZE;
>
> - EssData.X64.StackSwitchExceptions =
> CPU_STACK_SWITCH_EXCEPTION_LIST;
>
> - EssData.X64.StackSwitchExceptionNumber =
> CPU_STACK_SWITCH_EXCEPTION_NUMBER;
>
> - EssData.X64.IdtTable = (VOID *)Idtr.Base;
>
> - EssData.X64.IdtTableSize = Idtr.Limit + 1;
>
> - EssData.X64.GdtTable = mNewGdt;
>
> - EssData.X64.GdtTableSize = sizeof (mNewGdt);
>
> - EssData.X64.ExceptionTssDesc = mNewGdt + Gdtr.Limit + 1;
>
> - EssData.X64.ExceptionTssDescSize = CPU_TSS_DESC_SIZE;
>
> - EssData.X64.ExceptionTss = mNewGdt + Gdtr.Limit + 1 +
> CPU_TSS_DESC_SIZE;
>
> - EssData.X64.ExceptionTssSize = CPU_TSS_SIZE;
>
> -
>
> - InitData = &EssData;
>
> - }
>
> -
>
> - Status = ArchSetupExceptionStack (InitData);
>
> - }
>
> + if (InitData == NULL) {
>
> + SetMem (mNewGdt, sizeof (mNewGdt), 0);
>
> +
>
> + AsmReadIdtr (&Idtr);
>
> + AsmReadGdtr (&Gdtr);
>
> +
>
> + EssData.X64.Revision = CPU_EXCEPTION_INIT_DATA_REV;
>
> + EssData.X64.KnownGoodStackTop = (UINTN)mNewStack + sizeof
> (mNewStack);
>
> + EssData.X64.KnownGoodStackSize = CPU_KNOWN_GOOD_STACK_SIZE;
>
> + EssData.X64.StackSwitchExceptions =
> CPU_STACK_SWITCH_EXCEPTION_LIST;
>
> + EssData.X64.StackSwitchExceptionNumber =
> CPU_STACK_SWITCH_EXCEPTION_NUMBER;
>
> + EssData.X64.IdtTable = (VOID *)Idtr.Base;
>
> + EssData.X64.IdtTableSize = Idtr.Limit + 1;
>
> + EssData.X64.GdtTable = mNewGdt;
>
> + EssData.X64.GdtTableSize = sizeof (mNewGdt);
>
> + EssData.X64.ExceptionTssDesc = mNewGdt + Gdtr.Limit + 1;
>
> + EssData.X64.ExceptionTssDescSize = CPU_TSS_DESC_SIZE;
>
> + EssData.X64.ExceptionTss = mNewGdt + Gdtr.Limit + 1 +
> CPU_TSS_DESC_SIZE;
>
> + EssData.X64.ExceptionTssSize = CPU_TSS_SIZE;
>
> +
>
> + InitData = &EssData;
>
> }
>
>
>
> - return Status;
>
> + return ArchSetupExceptionStack (InitData);
>
> }
>
> diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> index 1ae611c75e..494c2ab433 100644
> --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> @@ -150,57 +150,26 @@ InitializeCpuExceptionHandlers (
> }
>
>
>
> /**
>
> - Initializes all CPU exceptions entries with optional extra initializations.
>
> + Setup separate stacks for certain exception handlers.
>
>
>
> - By default, this method should include all functionalities implemented by
>
> - InitializeCpuExceptionHandlers(), plus extra initialization works, if any.
>
> - This could be done by calling InitializeCpuExceptionHandlers() directly
>
> - in this method besides the extra works.
>
> + InitData is optional and processor arch dependent.
>
>
>
> - InitData is optional and its use and content are processor arch dependent.
>
> - The typical usage of it is to convey resources which have to be reserved
>
> - elsewhere and are necessary for the extra initializations of exception.
>
> + @param[in] InitData Pointer to data optional for information about how
>
> + to assign stacks for certain exception handlers.
>
>
>
> - @param[in] VectorInfo Pointer to reserved vector list.
>
> - @param[in] InitData Pointer to data optional for extra initializations
>
> - of exception.
>
> -
>
> - @retval EFI_SUCCESS The exceptions have been successfully
>
> - initialized.
>
> - @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid
>
> - content.
>
> + @retval EFI_SUCCESS The stacks are assigned successfully.
>
> + @retval EFI_UNSUPPORTED This function is not supported.
>
>
>
> **/
>
> EFI_STATUS
>
> EFIAPI
>
> -InitializeCpuExceptionHandlersEx (
>
> - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
>
> +InitializeSeparateExceptionStacks (
>
> IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
>
> )
>
> {
>
> - EFI_STATUS Status;
>
> -
>
> - //
>
> - // To avoid repeat initialization of default handlers, the caller should pass
>
> - // an extended init data with InitDefaultHandlers set to FALSE. There's no
>
> - // need to call this method to just initialize default handlers. Call non-ex
>
> - // version instead; or this method must be implemented as a simple wrapper
> of
>
> - // non-ex version of it, if this version has to be called.
>
> - //
>
> - if ((InitData == NULL) || InitData->Ia32.InitDefaultHandlers) {
>
> - Status = InitializeCpuExceptionHandlers (VectorInfo);
>
> - } else {
>
> - Status = EFI_SUCCESS;
>
> - }
>
> -
>
> - if (!EFI_ERROR (Status)) {
>
> - //
>
> - // Initializing stack switch is only necessary for Stack Guard functionality.
>
> - //
>
> - if (PcdGetBool (PcdCpuStackGuard) && (InitData != NULL)) {
>
> - Status = ArchSetupExceptionStack (InitData);
>
> - }
>
> + if (InitData == NULL) {
>
> + return EFI_UNSUPPORTED;
>
> }
>
>
>
> - return Status;
>
> + return ArchSetupExceptionStack (InitData);
>
> }
>
> diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> index e894ead612..4313cc5582 100644
> --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> @@ -200,33 +200,22 @@ RegisterCpuInterruptHandler (
> }
>
>
>
> /**
>
> - Initializes all CPU exceptions entries with optional extra initializations.
>
> + Setup separate stacks for certain exception handlers.
>
>
>
> - By default, this method should include all functionalities implemented by
>
> - InitializeCpuExceptionHandlers(), plus extra initialization works, if any.
>
> - This could be done by calling InitializeCpuExceptionHandlers() directly
>
> - in this method besides the extra works.
>
> + InitData is optional and processor arch dependent.
>
>
>
> - InitData is optional and its use and content are processor arch dependent.
>
> - The typical usage of it is to convey resources which have to be reserved
>
> - elsewhere and are necessary for the extra initializations of exception.
>
> + @param[in] InitData Pointer to data optional for information about how
>
> + to assign stacks for certain exception handlers.
>
>
>
> - @param[in] VectorInfo Pointer to reserved vector list.
>
> - @param[in] InitData Pointer to data optional for extra initializations
>
> - of exception.
>
> -
>
> - @retval EFI_SUCCESS The exceptions have been successfully
>
> - initialized.
>
> - @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid
>
> - content.
>
> + @retval EFI_SUCCESS The stacks are assigned successfully.
>
> + @retval EFI_UNSUPPORTED This function is not supported.
>
>
>
> **/
>
> EFI_STATUS
>
> EFIAPI
>
> -InitializeCpuExceptionHandlersEx (
>
> - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
>
> +InitializeSeparateExceptionStacks (
>
> IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
>
> )
>
> {
>
> - return InitializeCpuExceptionHandlers (VectorInfo);
>
> + return EFI_UNSUPPORTED;
>
> }
>
> diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> index ec643556c7..1c97dab926 100644
> --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> @@ -96,33 +96,22 @@ RegisterCpuInterruptHandler (
> }
>
>
>
> /**
>
> - Initializes all CPU exceptions entries with optional extra initializations.
>
> + Setup separate stacks for certain exception handlers.
>
>
>
> - By default, this method should include all functionalities implemented by
>
> - InitializeCpuExceptionHandlers(), plus extra initialization works, if any.
>
> - This could be done by calling InitializeCpuExceptionHandlers() directly
>
> - in this method besides the extra works.
>
> + InitData is optional and processor arch dependent.
>
>
>
> - InitData is optional and its use and content are processor arch dependent.
>
> - The typical usage of it is to convey resources which have to be reserved
>
> - elsewhere and are necessary for the extra initializations of exception.
>
> + @param[in] InitData Pointer to data optional for information about how
>
> + to assign stacks for certain exception handlers.
>
>
>
> - @param[in] VectorInfo Pointer to reserved vector list.
>
> - @param[in] InitData Pointer to data optional for extra initializations
>
> - of exception.
>
> -
>
> - @retval EFI_SUCCESS The exceptions have been successfully
>
> - initialized.
>
> - @retval EFI_INVALID_PARAMETER VectorInfo or InitData contains invalid
>
> - content.
>
> + @retval EFI_SUCCESS The stacks are assigned successfully.
>
> + @retval EFI_UNSUPPORTED This function is not supported.
>
>
>
> **/
>
> EFI_STATUS
>
> EFIAPI
>
> -InitializeCpuExceptionHandlersEx (
>
> - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL,
>
> +InitializeSeparateExceptionStacks (
>
> IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
>
> )
>
> {
>
> - return InitializeCpuExceptionHandlers (VectorInfo);
>
> + return EFI_UNSUPPORTED;
>
> }
>
> --
> 2.35.1.windows.2
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#89938): https://edk2.groups.io/g/devel/message/89938
Mute This Topic: https://groups.io/mt/91231771/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