On 3/19/2018 1:31 PM, Hao Wu wrote:
Within function ApWakeupFunction():

When source level debugger is enabled, AP interrupts will be enabled by
EnableDebugAgent(). Then the AP function will be execeuted by:

Procedure (Parameter);

After the AP function returns, AP interrupts will be disabled when the
APs are placed in loop mode (both HltLoop and MwaiLoop).

However, at ExitBootServices, ApWakeupFunction() is called with
'Procedure' equals to RelocateApLoop().

(ExitBootServices callback registered within InitMpGlobalData())

RelocateApLoop() never retuns, so it has to disable the AP interrupts by
itself. However, we find that interrupts are only disabled for the
HltLoop case, but not for the MwaitLoop case (within file MpFuncs.nasm).

This commit adds the missing disabling of AP interrupts for MwaitLoop.

Also, for X64, this commit will disable the interrupts before switching to
32-bit mode.

Cc: Laszlo Ersek <[email protected]>
Cc: Jeff Fan <[email protected]>
Cc: Ruiyu Ni <[email protected]>
Cc: Jiewen Yao <[email protected]>
Cc: Jian J Wang <[email protected]>
Cc: Star Zeng <[email protected]>
Cc: Eric Dong <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Hao Wu <[email protected]>
---
  UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm | 3 ++-
  UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm  | 4 +++-
  2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm 
b/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm
index bd79be0f5e..59e88d3f8f 100644
--- a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm
+++ b/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm
@@ -1,5 +1,5 @@
  
;------------------------------------------------------------------------------ 
;
-; Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
+; Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
  ; 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
@@ -239,6 +239,7 @@ AsmRelocateApLoopStart:
      cmp        cl,  1              ; Check mwait-monitor support
      jnz        HltLoop
  MwaitLoop:
+    cli
      mov        eax, esp
      xor        ecx, ecx
      xor        edx, edx
diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm 
b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
index 7595988884..76f8c078ab 100644
--- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
+++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
@@ -1,5 +1,5 @@
  
;------------------------------------------------------------------------------ 
;
-; Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
+; Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
  ; 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
@@ -253,6 +253,7 @@ RendezvousFunnelProcEnd:
  global ASM_PFX(AsmRelocateApLoop)
  ASM_PFX(AsmRelocateApLoop):
  AsmRelocateApLoopStart:
+    cli                          ; Disable interrupt before switching to 
32-bit mode
      mov        rax, [rsp + 40]   ; CountTofinish
      lock dec   dword [rax]       ; (*CountTofinish)--
      mov        rsp, r9
@@ -288,6 +289,7 @@ PmEntry:
      jnz        HltLoop
      mov        ebx, edx           ; Save C-State to ebx
  MwaitLoop:
+    cli
      mov        eax, esp           ; Set Monitor Address
      xor        ecx, ecx           ; ecx = 0
      xor        edx, edx           ; edx = 0

Reviewed-by: Ruiyu Ni <[email protected]>

--
Thanks,
Ray
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to