]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c
CpuException: Remove InitializeCpuInterruptHandlers
[mirror_edk2.git] / UefiCpuPkg / Library / CpuExceptionHandlerLib / PeiDxeSmmCpuException.c
index f47a80dcab8f8226a130446a9aa9fe7f8a3bf689..a7d0897ef1f903c85c66eae74feac0f5325e2825 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   CPU Exception Library provides PEI/DXE/SMM CPU common exception handler.\r
 \r
-Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2012 - 2022, Intel Corporation. All rights reserved.<BR>\r
 SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
@@ -261,31 +261,26 @@ InitializeCpuExceptionHandlersWorker (
   RESERVED_VECTORS_DATA           *ReservedVectors;\r
 \r
   ReservedVectors = ExceptionHandlerData->ReservedVectors;\r
-  SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * CPU_EXCEPTION_NUM, 0xff);\r
+  SetMem ((VOID *)ReservedVectors, sizeof (RESERVED_VECTORS_DATA) * ExceptionHandlerData->IdtEntryCount, 0xff);\r
   if (VectorInfo != NULL) {\r
-    Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, CPU_EXCEPTION_NUM);\r
+    Status = ReadAndVerifyVectorInfo (VectorInfo, ReservedVectors, ExceptionHandlerData->IdtEntryCount);\r
     if (EFI_ERROR (Status)) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
 \r
   //\r
-  // Read IDT descriptor and calculate IDT size\r
+  // Setup the exception handlers according to IDT size, but no more than\r
+  //   ExceptionHandlerData->IdtEntryCount (32 in PEI and SMM, 256 in DXE) handlers.\r
   //\r
   AsmReadIdtr (&IdtDescriptor);\r
-  IdtEntryCount = (IdtDescriptor.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR);\r
-  if (IdtEntryCount > CPU_EXCEPTION_NUM) {\r
-    //\r
-    // CPU exception library only setup CPU_EXCEPTION_NUM exception handler at most\r
-    //\r
-    IdtEntryCount = CPU_EXCEPTION_NUM;\r
-  }\r
+  IdtEntryCount                       = (IdtDescriptor.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR);\r
+  ExceptionHandlerData->IdtEntryCount = MIN (IdtEntryCount, ExceptionHandlerData->IdtEntryCount);\r
 \r
   IdtTable = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;\r
   AsmGetTemplateAddressMap (&TemplateMap);\r
   ASSERT (TemplateMap.ExceptionStubHeaderSize <= HOOKAFTER_STUB_SIZE);\r
 \r
-  ExceptionHandlerData->IdtEntryCount = IdtEntryCount;\r
   UpdateIdtTable (IdtTable, &TemplateMap, ExceptionHandlerData);\r
 \r
   return EFI_SUCCESS;\r