]> git.proxmox.com Git - mirror_edk2.git/commitdiff
a)Save and disable CPU interrupt before calling AsmWriteIdtr().
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 9 Feb 2010 09:23:17 +0000 (09:23 +0000)
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 9 Feb 2010 09:23:17 +0000 (09:23 +0000)
b)Restore CPU interrupt status after callng AsmWriteIdtr().

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9956 6f19259b-4bc3-4df7-8a09-765794883524

UefiCpuPkg/CpuDxe/CpuDxe.c

index 68579a7da0ebaad88967b2164de0cf2a5b3c3943..2895da8571140015f9a607856f0fdd6a5afb98bf 100644 (file)
@@ -1014,6 +1014,7 @@ InitInterruptDescriptorTable (
   IA32_DESCRIPTOR *IdtPtr;\r
   UINTN           Index;\r
   UINTN           CurrentHandler;\r
+  BOOLEAN         InterruptState;\r
 \r
   SetMem (ExternalVectorTable, sizeof(ExternalVectorTable), 0);\r
 \r
@@ -1040,7 +1041,19 @@ InitInterruptDescriptorTable (
   IdtPtr = ALIGN_POINTER (IdtPtrAlignmentBuffer, 16);\r
   IdtPtr->Base = (UINT32)(((UINTN)(VOID*) gIdtTable) & (BASE_4GB-1));\r
   IdtPtr->Limit = sizeof (gIdtTable) - 1;\r
+\r
+  //\r
+  // Disable interrupts and save the current interrupt state\r
+  //\r
+  InterruptState = SaveAndDisableInterrupts ();\r
+\r
   AsmWriteIdtr (IdtPtr);\r
+\r
+  //\r
+  // Restore the interrupt state\r
+  //\r
+  SetInterruptState (InterruptState);\r
+\r
   FreePool (IdtPtrAlignmentBuffer);\r
 \r
   //\r