[PATCH 3/5] CpuException: Avoid allocating page but using global variables


Ni, Ray
 

Signed-off-by: Ray Ni <ray.ni@...>
Cc: Eric Dong <eric.dong@...>
---
.../CpuExceptionHandlerLib/DxeException.c | 24 ++++---------------
1 file changed, 5 insertions(+), 19 deletions(-)

diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c b/Uef=
iCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
index da5b96d6c6..f139131a7c 100644
--- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
+++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
@@ -14,8 +14,8 @@
=0D
CONST UINTN mDoFarReturnFlag =3D 0;=0D
=0D
-RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM];=0D
-EFI_CPU_INTERRUPT_HANDLER mExternalInterruptHandlerTable[CPU_EXCEPTION_NU=
M];=0D
+RESERVED_VECTORS_DATA mReservedVectorsData[CPU_INTERRUPT_NUM];=0D
+EFI_CPU_INTERRUPT_HANDLER mExternalInterruptHandlerTable[CPU_INTERRUPT_NU=
M];=0D
EXCEPTION_HANDLER_DATA mExceptionHandlerData =3D {=0D
0, // To be fixed=0D
0, // To be fixed=0D
@@ -96,27 +96,15 @@ InitializeCpuInterruptHandlers (
IA32_DESCRIPTOR IdtDescriptor;=0D
UINTN IdtEntryCount;=0D
EXCEPTION_HANDLER_TEMPLATE_MAP TemplateMap;=0D
- RESERVED_VECTORS_DATA *ReservedVectors;=0D
- EFI_CPU_INTERRUPT_HANDLER *ExternalInterruptHandler;=0D
-=0D
- Status =3D gBS->AllocatePool (=0D
- EfiBootServicesCode,=0D
- sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM,=0D
- (VOID **)&ReservedVectors=0D
- );=0D
- ASSERT (!EFI_ERROR (Status) && ReservedVectors !=3D NULL);=0D
- SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_IN=
TERRUPT_NUM, 0xff);=0D
+=0D
+ SetMem ((VOID *)mReservedVectorsData, sizeof (RESERVED_VECTORS_DATA) * C=
PU_INTERRUPT_NUM, 0xff);=0D
if (VectorInfo !=3D NULL) {=0D
- Status =3D ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, CPU_I=
NTERRUPT_NUM);=0D
+ Status =3D ReadAndVerifyVectorInfo (VectorInfo, mReservedVectorsData, =
CPU_INTERRUPT_NUM);=0D
if (EFI_ERROR (Status)) {=0D
- FreePool (ReservedVectors);=0D
return EFI_INVALID_PARAMETER;=0D
}=0D
}=0D
=0D
- ExternalInterruptHandler =3D AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT=
_HANDLER) * CPU_INTERRUPT_NUM);=0D
- ASSERT (ExternalInterruptHandler !=3D NULL);=0D
-=0D
//=0D
// Read IDT descriptor and calculate IDT size=0D
//=0D
@@ -137,8 +125,6 @@ InitializeCpuInterruptHandlers (
ASSERT (TemplateMap.ExceptionStubHeaderSize <=3D HOOKAFTER_STUB_SIZE);=0D
=0D
mExceptionHandlerData.IdtEntryCount =3D CPU_INTERRUPT_NUM;=0D
- mExceptionHandlerData.ReservedVectors =3D ReservedVectors;=0D
- mExceptionHandlerData.ExternalInterruptHandler =3D ExternalInterruptHand=
ler;=0D
InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);=0D
=0D
UpdateIdtTable (IdtTable, &TemplateMap, &mExceptionHandlerData);=0D
--=20
2.35.1.windows.2


Wang, Jian J
 

Reviewed-by: Jian J Wang <jian.j.wang@...>

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.dong@...>
Subject: [edk2-devel] [PATCH 3/5] CpuException: Avoid allocating page but using
global variables

Signed-off-by: Ray Ni <ray.ni@...>
Cc: Eric Dong <eric.dong@...>
---
.../CpuExceptionHandlerLib/DxeException.c | 24 ++++---------------
1 file changed, 5 insertions(+), 19 deletions(-)

diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
index da5b96d6c6..f139131a7c 100644
--- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
+++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
@@ -14,8 +14,8 @@


CONST UINTN mDoFarReturnFlag = 0;



-RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM];

-EFI_CPU_INTERRUPT_HANDLER
mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM];

+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

@@ -96,27 +96,15 @@ InitializeCpuInterruptHandlers (
IA32_DESCRIPTOR IdtDescriptor;

UINTN IdtEntryCount;

EXCEPTION_HANDLER_TEMPLATE_MAP TemplateMap;

- RESERVED_VECTORS_DATA *ReservedVectors;

- EFI_CPU_INTERRUPT_HANDLER *ExternalInterruptHandler;

-

- Status = gBS->AllocatePool (

- EfiBootServicesCode,

- sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM,

- (VOID **)&ReservedVectors

- );

- ASSERT (!EFI_ERROR (Status) && ReservedVectors != NULL);

- SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) *
CPU_INTERRUPT_NUM, 0xff);

+

+ SetMem ((VOID *)mReservedVectorsData, sizeof (RESERVED_VECTORS_DATA)
* CPU_INTERRUPT_NUM, 0xff);

if (VectorInfo != NULL) {

- Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors,
CPU_INTERRUPT_NUM);

+ Status = ReadAndVerifyVectorInfo (VectorInfo, mReservedVectorsData,
CPU_INTERRUPT_NUM);

if (EFI_ERROR (Status)) {

- FreePool (ReservedVectors);

return EFI_INVALID_PARAMETER;

}

}



- ExternalInterruptHandler = AllocateZeroPool (sizeof
(EFI_CPU_INTERRUPT_HANDLER) * CPU_INTERRUPT_NUM);

- ASSERT (ExternalInterruptHandler != NULL);

-

//

// Read IDT descriptor and calculate IDT size

//

@@ -137,8 +125,6 @@ InitializeCpuInterruptHandlers (
ASSERT (TemplateMap.ExceptionStubHeaderSize <= HOOKAFTER_STUB_SIZE);



mExceptionHandlerData.IdtEntryCount = CPU_INTERRUPT_NUM;

- mExceptionHandlerData.ReservedVectors = ReservedVectors;

- mExceptionHandlerData.ExternalInterruptHandler = ExternalInterruptHandler;

InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);



UpdateIdtTable (IdtTable, &TemplateMap, &mExceptionHandlerData);

--
2.35.1.windows.2



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#89918): https://edk2.groups.io/g/devel/message/89918
Mute This Topic: https://groups.io/mt/91231769/1768734
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [jian.j.wang@...]
-=-=-=-=-=-=


Dong, Eric
 

Acked-by: Eric Dong <eric.dong@...>

-----Original Message-----
From: Ni, Ray <ray.ni@...>
Sent: Friday, May 20, 2022 10:16 PM
To: devel@edk2.groups.io
Cc: Dong, Eric <eric.dong@...>
Subject: [PATCH 3/5] CpuException: Avoid allocating page but using global variables

Signed-off-by: Ray Ni <ray.ni@...>
Cc: Eric Dong <eric.dong@...>
---
.../CpuExceptionHandlerLib/DxeException.c | 24 ++++---------------
1 file changed, 5 insertions(+), 19 deletions(-)

diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
index da5b96d6c6..f139131a7c 100644
--- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
+++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeException.c
@@ -14,8 +14,8 @@


CONST UINTN mDoFarReturnFlag = 0;



-RESERVED_VECTORS_DATA mReservedVectorsData[CPU_EXCEPTION_NUM];

-EFI_CPU_INTERRUPT_HANDLER mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM];

+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

@@ -96,27 +96,15 @@ InitializeCpuInterruptHandlers (
IA32_DESCRIPTOR IdtDescriptor;

UINTN IdtEntryCount;

EXCEPTION_HANDLER_TEMPLATE_MAP TemplateMap;

- RESERVED_VECTORS_DATA *ReservedVectors;

- EFI_CPU_INTERRUPT_HANDLER *ExternalInterruptHandler;

-

- Status = gBS->AllocatePool (

- EfiBootServicesCode,

- sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM,

- (VOID **)&ReservedVectors

- );

- ASSERT (!EFI_ERROR (Status) && ReservedVectors != NULL);

- SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff);

+

+ SetMem ((VOID *)mReservedVectorsData, sizeof (RESERVED_VECTORS_DATA) * CPU_INTERRUPT_NUM, 0xff);

if (VectorInfo != NULL) {

- Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, CPU_INTERRUPT_NUM);

+ Status = ReadAndVerifyVectorInfo (VectorInfo, mReservedVectorsData, CPU_INTERRUPT_NUM);

if (EFI_ERROR (Status)) {

- FreePool (ReservedVectors);

return EFI_INVALID_PARAMETER;

}

}



- ExternalInterruptHandler = AllocateZeroPool (sizeof (EFI_CPU_INTERRUPT_HANDLER) * CPU_INTERRUPT_NUM);

- ASSERT (ExternalInterruptHandler != NULL);

-

//

// Read IDT descriptor and calculate IDT size

//

@@ -137,8 +125,6 @@ InitializeCpuInterruptHandlers (
ASSERT (TemplateMap.ExceptionStubHeaderSize <= HOOKAFTER_STUB_SIZE);



mExceptionHandlerData.IdtEntryCount = CPU_INTERRUPT_NUM;

- mExceptionHandlerData.ReservedVectors = ReservedVectors;

- mExceptionHandlerData.ExternalInterruptHandler = ExternalInterruptHandler;

InitializeSpinLock (&mExceptionHandlerData.DisplayMessageSpinLock);



UpdateIdtTable (IdtTable, &TemplateMap, &mExceptionHandlerData);

--
2.35.1.windows.2