[edk2-devel] [PATCH 4/5] CpuException: Remove InitializeCpuInterruptHandlers
Wang, Jian J
jian.j.wang at intel.com
Tue May 24 15:17:20 UTC 2022
Another patch works for me.
Reviewed-by: Jian J Wang <jian.j.wang at intel.com>
Regards,
Jian
> -----Original Message-----
> From: Ni, Ray <ray.ni at intel.com>
> Sent: Tuesday, May 24, 2022 4:04 PM
> To: Wang, Jian J <jian.j.wang at intel.com>; devel at edk2.groups.io
> Cc: Dong, Eric <eric.dong at intel.com>
> Subject: Re: [edk2-devel] [PATCH 4/5] CpuException: Remove
> InitializeCpuInterruptHandlers
>
> Jian,
> I think we need discussion on where to put the common CPU_INTERRUPT_NUM
> definition.
>
> Do you agree that we can leave that to another patch?
>
> ________________________________________
> From: Wang, Jian J <jian.j.wang at intel.com>
> Sent: Monday, May 23, 2022 0:27
> To: devel at edk2.groups.io; Ni, Ray
> Cc: Dong, Eric
> Subject: RE: [edk2-devel] [PATCH 4/5] CpuException: Remove
> InitializeCpuInterruptHandlers
>
> Hi Ray,
>
> Both CpuDxe.c and CpuExceptionCommon.h have CPU_INTERRUPT_NUM
> defined.
> I'd suggest to move it to a common place, such as BaseLib.h. I don't see any
> issue
> if they are defined to different value. It just gives me a feeling that it might
> cause
> potential problems sometimes in the future.
>
>
> Regards,
> Jian
>
> > -----Original Message-----
> > From: devel at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Ni, Ray
> > Sent: Friday, May 20, 2022 10:16 PM
> > To: devel at edk2.groups.io
> > Cc: Dong, Eric <eric.dong at intel.com>
> > Subject: [edk2-devel] [PATCH 4/5] CpuException: Remove
> > InitializeCpuInterruptHandlers
> >
> > InitializeCpuExceptionHandlers() expects caller allocates IDT while
> > InitializeCpuInterruptHandlers() allocates 256 IDT entries itself.
> >
> > InitializeCpuExceptionHandlers() fills max 32 IDT entries allocated
> > by caller. If caller allocates 10 entries, the API just fills 10 IDT
> > entries.
> >
> > The inconsistency between the two APIs makes code hard to
> > unerstand and hard to share.
> >
> > Because there is only one caller (CpuDxe) for
> > InitializeCpuInterruptHandler(), this patch updates CpuDxe driver
> > to allocates 256 IDT entries then call
> > InitializeCpuExceptionHandlers().
> >
> > With this change, InitializeCpuInterruptHandlers() is removed
> > completely.
> >
> > And InitializeCpuExceptionHandlers() fills max 32 entries for PEI
> > and SMM instance, max 256 entries for DXE instance.
> > Such behavior matches to the original one.
> >
> > Signed-off-by: Ray Ni <ray.ni at intel.com>
> > Cc: Eric Dong <eric.dong at intel.com>
> > ---
> > .../Include/Library/CpuExceptionHandlerLib.h | 28 +------
> > .../CpuExceptionHandlerLibNull.c | 31 +------
> > UefiCpuPkg/CpuDxe/CpuDxe.c | 33 ++++++--
> > .../CpuExceptionHandlerLib/DxeException.c | 80 ++-----------------
> > .../CpuExceptionHandlerLib/PeiCpuException.c | 61 +-------------
> > .../PeiDxeSmmCpuException.c | 19 ++---
> > .../SecPeiCpuException.c | 31 +------
> > .../CpuExceptionHandlerLib/SmmException.c | 35 ++------
> > 8 files changed, 56 insertions(+), 262 deletions(-)
> >
> > diff --git a/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> > b/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> > index 22a4408f9f..d4649bebe1 100644
> > --- a/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> > +++ b/MdeModulePkg/Include/Library/CpuExceptionHandlerLib.h
> > @@ -2,7 +2,7 @@
> > CPU Exception library provides the default CPU interrupt/exception handler.
> >
> > It also provides capability to register user interrupt/exception handler.
> >
> >
> >
> > - Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
> >
> > + Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -132,28 +132,6 @@ InitializeCpuExceptionHandlersEx (
> > IN CPU_EXCEPTION_INIT_DATA *InitData OPTIONAL
> >
> > );
> >
> >
> >
> > -/**
> >
> > - Initializes all CPU interrupt/exceptions entries and provides the default
> > interrupt/exception handlers.
> >
> > -
> >
> > - Caller should try to get an array of interrupt and/or exception vectors that
> are
> > in use and need to
> >
> > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification.
> >
> > - If caller cannot get reserved vector list or it does not exists, set VectorInfo
> to
> > NULL.
> >
> > - If VectorInfo is not NULL, the exception vectors will be initialized per vector
> > attribute accordingly.
> >
> > -
> >
> > - @param[in] VectorInfo Pointer to reserved vector list.
> >
> > -
> >
> > - @retval EFI_SUCCESS All CPU interrupt/exception entries have been
> > successfully initialized
> >
> > - with default interrupt/exception handlers.
> >
> > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if
> > VectorInfo is not NULL.
> >
> > - @retval EFI_UNSUPPORTED This function is not supported.
> >
> > -
> >
> > -**/
> >
> > -EFI_STATUS
> >
> > -EFIAPI
> >
> > -InitializeCpuInterruptHandlers (
> >
> > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
> >
> > - );
> >
> > -
> >
> > /**
> >
> > Registers a function to be called from the processor interrupt handler.
> >
> >
> >
> > @@ -161,8 +139,8 @@ InitializeCpuInterruptHandlers (
> > interrupt or exception type specified by InterruptType. If InterruptHandler is
> > NULL, then the
> >
> > handler for the processor interrupt or exception type specified by
> > InterruptType is uninstalled.
> >
> > The installed handler is called once for each processor interrupt or exception.
> >
> > - NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > or
> >
> > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED
> > returned.
> >
> > + NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > is invoked,
> >
> > + otherwise EFI_UNSUPPORTED returned.
> >
> >
> >
> > @param[in] InterruptType Defines which interrupt or exception to hook.
> >
> > @param[in] InterruptHandler A pointer to a function of type
> > EFI_CPU_INTERRUPT_HANDLER that is called
> >
> > diff --git
> >
> a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> > Null.c
> >
> b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> > Null.c
> > index 35ab5a8db5..54f38788fe 100644
> > ---
> >
> a/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> > Null.c
> > +++
> >
> b/MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLib
> > Null.c
> > @@ -1,7 +1,7 @@
> > /** @file
> >
> > CPU Exception Handler library implementition with empty functions.
> >
> >
> >
> > - Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
> >
> > + Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -33,31 +33,6 @@ InitializeCpuExceptionHandlers (
> > return EFI_SUCCESS;
> >
> > }
> >
> >
> >
> > -/**
> >
> > - Initializes all CPU interrupt/exceptions entries and provides the default
> > interrupt/exception handlers.
> >
> > -
> >
> > - Caller should try to get an array of interrupt and/or exception vectors that
> are
> > in use and need to
> >
> > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification.
> >
> > - If caller cannot get reserved vector list or it does not exists, set VectorInfo
> to
> > NULL.
> >
> > - If VectorInfo is not NULL, the exception vectors will be initialized per vector
> > attribute accordingly.
> >
> > -
> >
> > - @param[in] VectorInfo Pointer to reserved vector list.
> >
> > -
> >
> > - @retval EFI_SUCCESS All CPU interrupt/exception entries have been
> > successfully initialized
> >
> > - with default interrupt/exception handlers.
> >
> > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if
> > VectorInfo is not NULL.
> >
> > - @retval EFI_UNSUPPORTED This function is not supported.
> >
> > -
> >
> > -**/
> >
> > -EFI_STATUS
> >
> > -EFIAPI
> >
> > -InitializeCpuInterruptHandlers (
> >
> > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
> >
> > - )
> >
> > -{
> >
> > - return EFI_SUCCESS;
> >
> > -}
> >
> > -
> >
> > /**
> >
> > Registers a function to be called from the processor interrupt handler.
> >
> >
> >
> > @@ -65,8 +40,8 @@ InitializeCpuInterruptHandlers (
> > interrupt or exception type specified by InterruptType. If InterruptHandler is
> > NULL, then the
> >
> > handler for the processor interrupt or exception type specified by
> > InterruptType is uninstalled.
> >
> > The installed handler is called once for each processor interrupt or exception.
> >
> > - NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > or
> >
> > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED
> > returned.
> >
> > + NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > is invoked,
> >
> > + otherwise EFI_UNSUPPORTED returned.
> >
> >
> >
> > @param[in] InterruptType Defines which interrupt or exception to hook.
> >
> > @param[in] InterruptHandler A pointer to a function of type
> > EFI_CPU_INTERRUPT_HANDLER that is called
> >
> > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c
> > index 00f3cb0957..a6a91507f6 100644
> > --- a/UefiCpuPkg/CpuDxe/CpuDxe.c
> > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c
> > @@ -1,7 +1,7 @@
> > /** @file
> >
> > CPU DXE Module to produce CPU ARCH Protocol.
> >
> >
> >
> > - Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>
> >
> > + Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -10,6 +10,8 @@
> > #include "CpuMp.h"
> >
> > #include "CpuPageTable.h"
> >
> >
> >
> > +#define CPU_INTERRUPT_NUM 256
> >
> > +
> >
> > //
> >
> > // Global Variables
> >
> > //
> >
> > @@ -924,9 +926,12 @@ InitInterruptDescriptorTable (
> > VOID
> >
> > )
> >
> > {
> >
> > - EFI_STATUS Status;
> >
> > - EFI_VECTOR_HANDOFF_INFO *VectorInfoList;
> >
> > - EFI_VECTOR_HANDOFF_INFO *VectorInfo;
> >
> > + EFI_STATUS Status;
> >
> > + EFI_VECTOR_HANDOFF_INFO *VectorInfoList;
> >
> > + EFI_VECTOR_HANDOFF_INFO *VectorInfo;
> >
> > + IA32_IDT_GATE_DESCRIPTOR *IdtTable;
> >
> > + IA32_DESCRIPTOR IdtDescriptor;
> >
> > + UINTN IdtEntryCount;
> >
> >
> >
> > VectorInfo = NULL;
> >
> > Status = EfiGetSystemConfigurationTable (&gEfiVectorHandoffTableGuid,
> > (VOID **)&VectorInfoList);
> >
> > @@ -934,7 +939,25 @@ InitInterruptDescriptorTable (
> > VectorInfo = VectorInfoList;
> >
> > }
> >
> >
> >
> > - Status = InitializeCpuInterruptHandlers (VectorInfo);
> >
> > + AsmReadIdtr (&IdtDescriptor);
> >
> > + IdtEntryCount = (IdtDescriptor.Limit + 1) / sizeof
> > (IA32_IDT_GATE_DESCRIPTOR);
> >
> > + if (IdtEntryCount < CPU_INTERRUPT_NUM) {
> >
> > + //
> >
> > + // Increase Interrupt Descriptor Table and Copy the old IDT table in
> >
> > + //
> >
> > + IdtTable = AllocateZeroPool (sizeof (IA32_IDT_GATE_DESCRIPTOR) *
> > CPU_INTERRUPT_NUM);
> >
> > + ASSERT (IdtTable != NULL);
> >
> > + CopyMem (IdtTable, (VOID *)IdtDescriptor.Base, sizeof
> > (IA32_IDT_GATE_DESCRIPTOR) * IdtEntryCount);
> >
> > +
> >
> > + //
> >
> > + // Load Interrupt Descriptor Table
> >
> > + //
> >
> > + IdtDescriptor.Base = (UINTN)IdtTable;
> >
> > + IdtDescriptor.Limit = (UINT16)(sizeof (IA32_IDT_GATE_DESCRIPTOR) *
> > CPU_INTERRUPT_NUM - 1);
> >
> > + AsmWriteIdtr (&IdtDescriptor);
> >
> > + }
> >
> > +
> >
> > + Status = InitializeCpuExceptionHandlers (VectorInfo);
> >
> > ASSERT_EFI_ERROR (Status);
> >
> > }
> >
> >
> >
> > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> > index f139131a7c..c7c1fe31d2 100644
> > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
> > @@ -1,7 +1,7 @@
> > /** @file
> >
> > CPU exception handler library implemenation for DXE modules.
> >
> >
> >
> > - Copyright (c) 2013 - 2017, Intel Corporation. All rights reserved.<BR>
> >
> > + Copyright (c) 2013 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -17,8 +17,8 @@ CONST UINTN mDoFarReturnFlag = 0;
> > RESERVED_VECTORS_DATA
> mReservedVectorsData[CPU_INTERRUPT_NUM];
> >
> > EFI_CPU_INTERRUPT_HANDLER
> > mExternalInterruptHandlerTable[CPU_INTERRUPT_NUM];
> >
> > EXCEPTION_HANDLER_DATA mExceptionHandlerData = {
> >
> > - 0, // To be fixed
> >
> > - 0, // To be fixed
> >
> > + CPU_INTERRUPT_NUM,
> >
> > + 0, // To be fixed
> >
> > mReservedVectorsData,
> >
> > mExternalInterruptHandlerTable
> >
> > };
> >
> > @@ -69,76 +69,6 @@ InitializeCpuExceptionHandlers (
> > return InitializeCpuExceptionHandlersWorker (VectorInfo,
> > &mExceptionHandlerData);
> >
> > }
> >
> >
> >
> > -/**
> >
> > - Initializes all CPU interrupt/exceptions entries and provides the default
> > interrupt/exception handlers.
> >
> > -
> >
> > - Caller should try to get an array of interrupt and/or exception vectors that
> are
> > in use and need to
> >
> > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification.
> >
> > - If caller cannot get reserved vector list or it does not exists, set VectorInfo
> to
> > NULL.
> >
> > - If VectorInfo is not NULL, the exception vectors will be initialized per vector
> > attribute accordingly.
> >
> > -
> >
> > - @param[in] VectorInfo Pointer to reserved vector list.
> >
> > -
> >
> > - @retval EFI_SUCCESS All CPU interrupt/exception entries have been
> > successfully initialized
> >
> > - with default interrupt/exception handlers.
> >
> > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if
> > VectorInfo is not NULL.
> >
> > - @retval EFI_UNSUPPORTED This function is not supported.
> >
> > -
> >
> > -**/
> >
> > -EFI_STATUS
> >
> > -EFIAPI
> >
> > -InitializeCpuInterruptHandlers (
> >
> > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
> >
> > - )
> >
> > -{
> >
> > - EFI_STATUS Status;
> >
> > - IA32_IDT_GATE_DESCRIPTOR *IdtTable;
> >
> > - IA32_DESCRIPTOR IdtDescriptor;
> >
> > - UINTN IdtEntryCount;
> >
> > - EXCEPTION_HANDLER_TEMPLATE_MAP TemplateMap;
> >
> > -
> >
> > - SetMem ((VOID *)mReservedVectorsData, sizeof
> (RESERVED_VECTORS_DATA)
> > * CPU_INTERRUPT_NUM, 0xff);
> >
> > - if (VectorInfo != NULL) {
> >
> > - Status = ReadAndVerifyVectorInfo (VectorInfo, mReservedVectorsData,
> > CPU_INTERRUPT_NUM);
> >
> > - if (EFI_ERROR (Status)) {
> >
> > - return EFI_INVALID_PARAMETER;
> >
> > - }
> >
> > - }
> >
> > -
> >
> > - //
> >
> > - // Read IDT descriptor and calculate IDT size
> >
> > - //
> >
> > - AsmReadIdtr (&IdtDescriptor);
> >
> > - IdtEntryCount = (IdtDescriptor.Limit + 1) / sizeof
> > (IA32_IDT_GATE_DESCRIPTOR);
> >
> > - if (IdtEntryCount > CPU_INTERRUPT_NUM) {
> >
> > - IdtEntryCount = CPU_INTERRUPT_NUM;
> >
> > - }
> >
> > -
> >
> > - //
> >
> > - // Create Interrupt Descriptor Table and Copy the old IDT table in
> >
> > - //
> >
> > - IdtTable = AllocateZeroPool (sizeof (IA32_IDT_GATE_DESCRIPTOR) *
> > CPU_INTERRUPT_NUM);
> >
> > - ASSERT (IdtTable != NULL);
> >
> > - CopyMem (IdtTable, (VOID *)IdtDescriptor.Base, sizeof
> > (IA32_IDT_GATE_DESCRIPTOR) * IdtEntryCount);
> >
> > -
> >
> > - AsmGetTemplateAddressMap (&TemplateMap);
> >
> > - ASSERT (TemplateMap.ExceptionStubHeaderSize <=
> HOOKAFTER_STUB_SIZE);
> >
> > -
> >
> > - mExceptionHandlerData.IdtEntryCount = CPU_INTERRUPT_NUM;
> >
> > - InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);
> >
> > -
> >
> > - UpdateIdtTable (IdtTable, &TemplateMap, &mExceptionHandlerData);
> >
> > -
> >
> > - //
> >
> > - // Load Interrupt Descriptor Table
> >
> > - //
> >
> > - IdtDescriptor.Base = (UINTN)IdtTable;
> >
> > - IdtDescriptor.Limit = (UINT16)(sizeof (IA32_IDT_GATE_DESCRIPTOR) *
> > CPU_INTERRUPT_NUM - 1);
> >
> > - AsmWriteIdtr ((IA32_DESCRIPTOR *)&IdtDescriptor);
> >
> > -
> >
> > - return EFI_SUCCESS;
> >
> > -}
> >
> > -
> >
> > /**
> >
> > Registers a function to be called from the processor interrupt handler.
> >
> >
> >
> > @@ -146,8 +76,8 @@ InitializeCpuInterruptHandlers (
> > interrupt or exception type specified by InterruptType. If InterruptHandler is
> > NULL, then the
> >
> > handler for the processor interrupt or exception type specified by
> > InterruptType is uninstalled.
> >
> > The installed handler is called once for each processor interrupt or exception.
> >
> > - NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > or
> >
> > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED
> > returned.
> >
> > + NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > is invoked,
> >
> > + otherwise EFI_UNSUPPORTED returned.
> >
> >
> >
> > @param[in] InterruptType Defines which interrupt or exception to hook.
> >
> > @param[in] InterruptHandler A pointer to a function of type
> > EFI_CPU_INTERRUPT_HANDLER that is called
> >
> > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> > index 687fc4177f..1ae611c75e 100644
> > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuException.c
> > @@ -1,7 +1,7 @@
> > /** @file
> >
> > CPU exception handler library implementation for PEIM module.
> >
> >
> >
> > -Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>
> >
> > +Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -133,6 +133,7 @@ InitializeCpuExceptionHandlers (
> >
> >
> > ExceptionHandlerData = AllocatePool (sizeof (EXCEPTION_HANDLER_DATA));
> >
> > ASSERT (ExceptionHandlerData != NULL);
> >
> > + ExceptionHandlerData->IdtEntryCount = CPU_EXCEPTION_NUM;
> >
> > ExceptionHandlerData->ReservedVectors = ReservedVectors;
> >
> > ExceptionHandlerData->ExternalInterruptHandler = NULL;
> >
> > InitializeSpinLock (&ExceptionHandlerData->DisplayMessageSpinLock);
> >
> > @@ -148,64 +149,6 @@ InitializeCpuExceptionHandlers (
> > return EFI_SUCCESS;
> >
> > }
> >
> >
> >
> > -/**
> >
> > - Initializes all CPU interrupt/exceptions entries and provides the default
> > interrupt/exception handlers.
> >
> > -
> >
> > - Caller should try to get an array of interrupt and/or exception vectors that
> are
> > in use and need to
> >
> > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification.
> >
> > - If caller cannot get reserved vector list or it does not exists, set VectorInfo
> to
> > NULL.
> >
> > - If VectorInfo is not NULL, the exception vectors will be initialized per vector
> > attribute accordingly.
> >
> > -
> >
> > - @param[in] VectorInfo Pointer to reserved vector list.
> >
> > -
> >
> > - @retval EFI_SUCCESS All CPU interrupt/exception entries have been
> > successfully initialized
> >
> > - with default interrupt/exception handlers.
> >
> > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if
> > VectorInfo is not NULL.
> >
> > - @retval EFI_UNSUPPORTED This function is not supported.
> >
> > -
> >
> > -**/
> >
> > -EFI_STATUS
> >
> > -EFIAPI
> >
> > -InitializeCpuInterruptHandlers (
> >
> > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
> >
> > - )
> >
> > -{
> >
> > - return EFI_UNSUPPORTED;
> >
> > -}
> >
> > -
> >
> > -/**
> >
> > - Registers a function to be called from the processor interrupt handler.
> >
> > -
> >
> > - This function registers and enables the handler specified by InterruptHandler
> > for a processor
> >
> > - interrupt or exception type specified by InterruptType. If InterruptHandler is
> > NULL, then the
> >
> > - handler for the processor interrupt or exception type specified by
> > InterruptType is uninstalled.
> >
> > - The installed handler is called once for each processor interrupt or exception.
> >
> > - NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > or
> >
> > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED
> > returned.
> >
> > -
> >
> > - @param[in] InterruptType Defines which interrupt or exception to hook.
> >
> > - @param[in] InterruptHandler A pointer to a function of type
> > EFI_CPU_INTERRUPT_HANDLER that is called
> >
> > - when a processor interrupt occurs. If this parameter is NULL,
> > then the handler
> >
> > - will be uninstalled.
> >
> > -
> >
> > - @retval EFI_SUCCESS The handler for the processor interrupt was
> > successfully installed or uninstalled.
> >
> > - @retval EFI_ALREADY_STARTED InterruptHandler is not NULL, and a
> handler
> > for InterruptType was
> >
> > - previously installed.
> >
> > - @retval EFI_INVALID_PARAMETER InterruptHandler is NULL, and a handler
> for
> > InterruptType was not
> >
> > - previously installed.
> >
> > - @retval EFI_UNSUPPORTED The interrupt specified by InterruptType is
> not
> > supported,
> >
> > - or this function is not supported.
> >
> > -**/
> >
> > -EFI_STATUS
> >
> > -EFIAPI
> >
> > -RegisterCpuInterruptHandler (
> >
> > - IN EFI_EXCEPTION_TYPE InterruptType,
> >
> > - IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
> >
> > - )
> >
> > -{
> >
> > - return EFI_UNSUPPORTED;
> >
> > -}
> >
> > -
> >
> > /**
> >
> > Initializes all CPU exceptions entries with optional extra initializations.
> >
> >
> >
> > diff --git
> > a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c
> > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c
> > index f47a80dcab..a7d0897ef1 100644
> > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c
> > +++
> b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c
> > @@ -1,7 +1,7 @@
> > /** @file
> >
> > CPU Exception Library provides PEI/DXE/SMM CPU common exception
> handler.
> >
> >
> >
> > -Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
> >
> > +Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -261,31 +261,26 @@ InitializeCpuExceptionHandlersWorker (
> > RESERVED_VECTORS_DATA *ReservedVectors;
> >
> >
> >
> > ReservedVectors = ExceptionHandlerData->ReservedVectors;
> >
> > - SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) *
> > CPU_EXCEPTION_NUM, 0xff);
> >
> > + SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) *
> > ExceptionHandlerData->IdtEntryCount, 0xff);
> >
> > if (VectorInfo != NULL) {
> >
> > - Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors,
> > CPU_EXCEPTION_NUM);
> >
> > + Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors,
> > ExceptionHandlerData->IdtEntryCount);
> >
> > if (EFI_ERROR (Status)) {
> >
> > return EFI_INVALID_PARAMETER;
> >
> > }
> >
> > }
> >
> >
> >
> > //
> >
> > - // Read IDT descriptor and calculate IDT size
> >
> > + // Setup the exception handlers according to IDT size, but no more than
> >
> > + // ExceptionHandlerData->IdtEntryCount (32 in PEI and SMM, 256 in DXE)
> > handlers.
> >
> > //
> >
> > AsmReadIdtr (&IdtDescriptor);
> >
> > - IdtEntryCount = (IdtDescriptor.Limit + 1) / sizeof
> > (IA32_IDT_GATE_DESCRIPTOR);
> >
> > - if (IdtEntryCount > CPU_EXCEPTION_NUM) {
> >
> > - //
> >
> > - // CPU exception library only setup CPU_EXCEPTION_NUM exception
> handler
> > at most
> >
> > - //
> >
> > - IdtEntryCount = CPU_EXCEPTION_NUM;
> >
> > - }
> >
> > + IdtEntryCount = (IdtDescriptor.Limit + 1) / sizeof
> > (IA32_IDT_GATE_DESCRIPTOR);
> >
> > + ExceptionHandlerData->IdtEntryCount = MIN (IdtEntryCount,
> > ExceptionHandlerData->IdtEntryCount);
> >
> >
> >
> > IdtTable = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;
> >
> > AsmGetTemplateAddressMap (&TemplateMap);
> >
> > ASSERT (TemplateMap.ExceptionStubHeaderSize <= HOOKAFTER_STUB_SIZE);
> >
> >
> >
> > - ExceptionHandlerData->IdtEntryCount = IdtEntryCount;
> >
> > UpdateIdtTable (IdtTable, &TemplateMap, ExceptionHandlerData);
> >
> >
> >
> > return EFI_SUCCESS;
> >
> > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> > index 6e5216380d..e894ead612 100644
> > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c
> > @@ -1,7 +1,7 @@
> > /** @file
> >
> > CPU exception handler library implemenation for SEC/PEIM modules.
> >
> >
> >
> > -Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
> >
> > +Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -166,31 +166,6 @@ InitializeCpuExceptionHandlers (
> > return EFI_SUCCESS;
> >
> > }
> >
> >
> >
> > -/**
> >
> > - Initializes all CPU interrupt/exceptions entries and provides the default
> > interrupt/exception handlers.
> >
> > -
> >
> > - Caller should try to get an array of interrupt and/or exception vectors that
> are
> > in use and need to
> >
> > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification.
> >
> > - If caller cannot get reserved vector list or it does not exists, set VectorInfo
> to
> > NULL.
> >
> > - If VectorInfo is not NULL, the exception vectors will be initialized per vector
> > attribute accordingly.
> >
> > -
> >
> > - @param[in] VectorInfo Pointer to reserved vector list.
> >
> > -
> >
> > - @retval EFI_SUCCESS All CPU interrupt/exception entries have been
> > successfully initialized
> >
> > - with default interrupt/exception handlers.
> >
> > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if
> > VectorInfo is not NULL.
> >
> > - @retval EFI_UNSUPPORTED This function is not supported.
> >
> > -
> >
> > -**/
> >
> > -EFI_STATUS
> >
> > -EFIAPI
> >
> > -InitializeCpuInterruptHandlers (
> >
> > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
> >
> > - )
> >
> > -{
> >
> > - return EFI_UNSUPPORTED;
> >
> > -}
> >
> > -
> >
> > /**
> >
> > Registers a function to be called from the processor interrupt handler.
> >
> >
> >
> > @@ -198,8 +173,8 @@ InitializeCpuInterruptHandlers (
> > interrupt or exception type specified by InterruptType. If InterruptHandler is
> > NULL, then the
> >
> > handler for the processor interrupt or exception type specified by
> > InterruptType is uninstalled.
> >
> > The installed handler is called once for each processor interrupt or exception.
> >
> > - NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > or
> >
> > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED
> > returned.
> >
> > + NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > is invoked,
> >
> > + otherwise EFI_UNSUPPORTED returned.
> >
> >
> >
> > @param[in] InterruptType Defines which interrupt or exception to hook.
> >
> > @param[in] InterruptHandler A pointer to a function of type
> > EFI_CPU_INTERRUPT_HANDLER that is called
> >
> > diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> > b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> > index 9f0af4120a..ec643556c7 100644
> > --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> > +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmException.c
> > @@ -1,7 +1,7 @@
> > /** @file
> >
> > CPU exception handler library implementation for SMM modules.
> >
> >
> >
> > - Copyright (c) 2013 - 2017, Intel Corporation. All rights reserved.<BR>
> >
> > + Copyright (c) 2013 - 2022, Intel Corporation. All rights reserved.<BR>
> >
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> >
> > **/
> >
> > @@ -14,8 +14,8 @@ CONST UINTN mDoFarReturnFlag = 1;
> > RESERVED_VECTORS_DATA
> mReservedVectorsData[CPU_EXCEPTION_NUM];
> >
> > EFI_CPU_INTERRUPT_HANDLER
> > mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM];
> >
> > EXCEPTION_HANDLER_DATA mExceptionHandlerData = {
> >
> > - 0, // To be fixed
> >
> > - 0, // To be fixed
> >
> > + CPU_EXCEPTION_NUM,
> >
> > + 0, // To be fixed
> >
> > mReservedVectorsData,
> >
> > mExternalInterruptHandlerTable
> >
> > };
> >
> > @@ -62,31 +62,6 @@ InitializeCpuExceptionHandlers (
> > return InitializeCpuExceptionHandlersWorker (VectorInfo,
> > &mExceptionHandlerData);
> >
> > }
> >
> >
> >
> > -/**
> >
> > - Initializes all CPU interrupt/exceptions entries and provides the default
> > interrupt/exception handlers.
> >
> > -
> >
> > - Caller should try to get an array of interrupt and/or exception vectors that
> are
> > in use and need to
> >
> > - persist by EFI_VECTOR_HANDOFF_INFO defined in PI 1.3 specification.
> >
> > - If caller cannot get reserved vector list or it does not exists, set VectorInfo
> to
> > NULL.
> >
> > - If VectorInfo is not NULL, the exception vectors will be initialized per vector
> > attribute accordingly.
> >
> > -
> >
> > - @param[in] VectorInfo Pointer to reserved vector list.
> >
> > -
> >
> > - @retval EFI_SUCCESS All CPU interrupt/exception entries have been
> > successfully initialized
> >
> > - with default interrupt/exception handlers.
> >
> > - @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if
> > VectorInfo is not NULL.
> >
> > - @retval EFI_UNSUPPORTED This function is not supported.
> >
> > -
> >
> > -**/
> >
> > -EFI_STATUS
> >
> > -EFIAPI
> >
> > -InitializeCpuInterruptHandlers (
> >
> > - IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
> >
> > - )
> >
> > -{
> >
> > - return EFI_UNSUPPORTED;
> >
> > -}
> >
> > -
> >
> > /**
> >
> > Registers a function to be called from the processor interrupt handler.
> >
> >
> >
> > @@ -94,8 +69,8 @@ InitializeCpuInterruptHandlers (
> > interrupt or exception type specified by InterruptType. If InterruptHandler is
> > NULL, then the
> >
> > handler for the processor interrupt or exception type specified by
> > InterruptType is uninstalled.
> >
> > The installed handler is called once for each processor interrupt or exception.
> >
> > - NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > or
> >
> > - InitializeCpuInterruptHandlers() invoked, otherwise EFI_UNSUPPORTED
> > returned.
> >
> > + NOTE: This function should be invoked after InitializeCpuExceptionHandlers()
> > is invoked,
> >
> > + otherwise EFI_UNSUPPORTED returned.
> >
> >
> >
> > @param[in] InterruptType Defines which interrupt or exception to hook.
> >
> > @param[in] InterruptHandler A pointer to a function of type
> > EFI_CPU_INTERRUPT_HANDLER that is called
> >
> > --
> > 2.35.1.windows.2
> >
> >
> >
> > -=-=-=-=-=-=
> > Groups.io Links: You receive all messages sent to this group.
> > View/Reply Online (#89919): https://edk2.groups.io/g/devel/message/89919
> > Mute This Topic: https://groups.io/mt/91231770/1768734
> > Group Owner: devel+owner at edk2.groups.io
> > Unsubscribe: https://edk2.groups.io/g/devel/unsub [jian.j.wang at intel.com]
> > -=-=-=-=-=-=
> >
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#89985): https://edk2.groups.io/g/devel/message/89985
Mute This Topic: https://groups.io/mt/91231770/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