Another patch works for me. Reviewed-by: Jian J Wang <jian.j.w...@intel.com>
Regards, Jian > -----Original Message----- > From: Ni, Ray <ray...@intel.com> > Sent: Tuesday, May 24, 2022 4:04 PM > To: Wang, Jian J <jian.j.w...@intel.com>; devel@edk2.groups.io > Cc: Dong, Eric <eric.d...@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.w...@intel.com> > Sent: Monday, May 23, 2022 0:27 > To: devel@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@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Ni, Ray > > Sent: Friday, May 20, 2022 10:16 PM > > To: devel@edk2.groups.io > > Cc: Dong, Eric <eric.d...@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...@intel.com> > > Cc: Eric Dong <eric.d...@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+ow...@edk2.groups.io > > Unsubscribe: https://edk2.groups.io/g/devel/unsub [jian.j.w...@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/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-