From ea99e00d7694f2dc9ece9647b59f296d2f70700f Mon Sep 17 00:00:00 2001 From: vanjeff Date: Tue, 9 Feb 2010 09:23:17 +0000 Subject: [PATCH] a)Save and disable CPU interrupt before calling AsmWriteIdtr(). 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 | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c index 68579a7da0..2895da8571 100644 --- a/UefiCpuPkg/CpuDxe/CpuDxe.c +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c @@ -1014,6 +1014,7 @@ InitInterruptDescriptorTable ( IA32_DESCRIPTOR *IdtPtr; UINTN Index; UINTN CurrentHandler; + BOOLEAN InterruptState; SetMem (ExternalVectorTable, sizeof(ExternalVectorTable), 0); @@ -1040,7 +1041,19 @@ InitInterruptDescriptorTable ( IdtPtr = ALIGN_POINTER (IdtPtrAlignmentBuffer, 16); IdtPtr->Base = (UINT32)(((UINTN)(VOID*) gIdtTable) & (BASE_4GB-1)); IdtPtr->Limit = sizeof (gIdtTable) - 1; + + // + // Disable interrupts and save the current interrupt state + // + InterruptState = SaveAndDisableInterrupts (); + AsmWriteIdtr (IdtPtr); + + // + // Restore the interrupt state + // + SetInterruptState (InterruptState); + FreePool (IdtPtrAlignmentBuffer); // -- 2.39.2