From 28b5f7c06238b25732bf6f0c72c3d42b94abee66 Mon Sep 17 00:00:00 2001 From: klu2 Date: Tue, 23 Feb 2010 07:32:20 +0000 Subject: [PATCH] Disable interrupt when changing IDTR register. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10046 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/Ia32/WriteIdtr.S | 5 ++++- MdePkg/Library/BaseLib/Ia32/WriteIdtr.asm | 5 ++++- MdePkg/Library/BaseLib/Ia32/WriteIdtr.c | 5 ++++- MdePkg/Library/BaseLib/X64/WriteIdtr.S | 5 ++++- MdePkg/Library/BaseLib/X64/WriteIdtr.asm | 5 ++++- 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S index 1f4857e0c4..e9fc03bb5e 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S +++ b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.S @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ # -# Copyright (c) 2006 - 2008, Intel Corporation +# Copyright (c) 2006 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -31,5 +31,8 @@ ASM_GLOBAL ASM_PFX(InternalX86WriteIdtr) ASM_PFX(InternalX86WriteIdtr): movl 4(%esp), %eax + pushfl + cli lidt (%eax) + popfl ret diff --git a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.asm b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.asm index 65fca407f2..76c3f13339 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.asm +++ b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.asm @@ -1,6 +1,6 @@ ;------------------------------------------------------------------------------ ; -; Copyright (c) 2006, Intel Corporation +; Copyright (c) 2006 - 2010, Intel Corporation ; All rights reserved. This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at @@ -34,7 +34,10 @@ ;------------------------------------------------------------------------------ InternalX86WriteIdtr PROC mov eax, [esp + 4] + pushfd + cli lidt fword ptr [eax] + popfd ret InternalX86WriteIdtr ENDP diff --git a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.c b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.c index 33d2b29fe8..d58520fb25 100644 --- a/MdePkg/Library/BaseLib/Ia32/WriteIdtr.c +++ b/MdePkg/Library/BaseLib/Ia32/WriteIdtr.c @@ -1,7 +1,7 @@ /** @file AsmWriteIdtr function - Copyright (c) 2006 - 2008, Intel Corporation
+ Copyright (c) 2006 - 2010, Intel Corporation
All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at @@ -32,7 +32,10 @@ InternalX86WriteIdtr ( { _asm { mov eax, Idtr + pushfd + cli lidt fword ptr [eax] + popfd } } diff --git a/MdePkg/Library/BaseLib/X64/WriteIdtr.S b/MdePkg/Library/BaseLib/X64/WriteIdtr.S index 544ef7929c..33365502d5 100644 --- a/MdePkg/Library/BaseLib/X64/WriteIdtr.S +++ b/MdePkg/Library/BaseLib/X64/WriteIdtr.S @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ # -# Copyright (c) 2006 - 2009, Intel Corporation +# Copyright (c) 2006 - 2010, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -31,5 +31,8 @@ #------------------------------------------------------------------------------ ASM_GLOBAL ASM_PFX(InternalX86WriteIdtr) ASM_PFX(InternalX86WriteIdtr): + pushfq + cli lidt (%rcx) + popfq ret diff --git a/MdePkg/Library/BaseLib/X64/WriteIdtr.asm b/MdePkg/Library/BaseLib/X64/WriteIdtr.asm index 2f6c081ab6..a658fe3728 100644 --- a/MdePkg/Library/BaseLib/X64/WriteIdtr.asm +++ b/MdePkg/Library/BaseLib/X64/WriteIdtr.asm @@ -1,6 +1,6 @@ ;------------------------------------------------------------------------------ ; -; Copyright (c) 2006, Intel Corporation +; Copyright (c) 2006 - 2010, Intel Corporation ; All rights reserved. This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at @@ -31,7 +31,10 @@ ; ); ;------------------------------------------------------------------------------ InternalX86WriteIdtr PROC + pushfq + cli lidt fword ptr [rcx] + popfq ret InternalX86WriteIdtr ENDP