//\r
AsmWriteIdtr (&PeiS3ResumeState->Idtr);\r
\r
+ //\r
+ // NOTE: Because Debug Timer interrupt and system interrupts will be disabled \r
+ // in BootScriptExecuteDxe, the rest code in S3ResumeBootOs() cannot be halted\r
+ // by soft debugger.\r
+ //\r
+\r
PERF_END (NULL, "ScriptExec", NULL, 0);\r
\r
//\r
DEBUG (( EFI_D_ERROR, "SMM S3 Return Stack Pointer = %x\n", SmmS3ResumeState->ReturnStackPointer));\r
DEBUG (( EFI_D_ERROR, "SMM S3 Smst = %x\n", SmmS3ResumeState->Smst));\r
\r
- //\r
- // Disable interrupt of Debug timer.\r
- //\r
- SaveAndSetDebugTimerInterrupt (FALSE);\r
-\r
if (SmmS3ResumeState->Signature == SMM_S3_RESUME_SMM_32) {\r
SwitchStack (\r
(SWITCH_STACK_ENTRY_POINT)(UINTN)SmmS3ResumeState->SmmS3ResumeEntryPoint,\r
SetInterruptState (InterruptStatus);\r
\r
AsmWriteCr3 ((UINTN)SmmS3ResumeState->SmmS3Cr3);\r
+\r
+ //\r
+ // Disable interrupt of Debug timer, since IDT table cannot work in long mode.\r
+ // NOTE: On x64 platforms, because DisablePaging64() will disable interrupts,\r
+ // the code in S3ResumeExecuteBootScript() cannot be halted by soft debugger.\r
+ //\r
+ SaveAndSetDebugTimerInterrupt (FALSE);\r
+\r
AsmEnablePaging64 (\r
0x38,\r
SmmS3ResumeState->SmmS3ResumeEntryPoint,\r