diff options
Diffstat (limited to 'arch/x86/kernel/head_32.S')
| -rw-r--r-- | arch/x86/kernel/head_32.S | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S index 81ba27679f18..f36bd42d6f0c 100644 --- a/arch/x86/kernel/head_32.S +++ b/arch/x86/kernel/head_32.S | |||
| @@ -544,6 +544,10 @@ ENDPROC(early_idt_handlers) | |||
| 544 | /* This is global to keep gas from relaxing the jumps */ | 544 | /* This is global to keep gas from relaxing the jumps */ |
| 545 | ENTRY(early_idt_handler) | 545 | ENTRY(early_idt_handler) |
| 546 | cld | 546 | cld |
| 547 | |||
| 548 | cmpl $2,(%esp) # X86_TRAP_NMI | ||
| 549 | je is_nmi # Ignore NMI | ||
| 550 | |||
| 547 | cmpl $2,%ss:early_recursion_flag | 551 | cmpl $2,%ss:early_recursion_flag |
| 548 | je hlt_loop | 552 | je hlt_loop |
| 549 | incl %ss:early_recursion_flag | 553 | incl %ss:early_recursion_flag |
| @@ -594,8 +598,9 @@ ex_entry: | |||
| 594 | pop %edx | 598 | pop %edx |
| 595 | pop %ecx | 599 | pop %ecx |
| 596 | pop %eax | 600 | pop %eax |
| 597 | addl $8,%esp /* drop vector number and error code */ | ||
| 598 | decl %ss:early_recursion_flag | 601 | decl %ss:early_recursion_flag |
| 602 | is_nmi: | ||
| 603 | addl $8,%esp /* drop vector number and error code */ | ||
| 599 | iret | 604 | iret |
| 600 | ENDPROC(early_idt_handler) | 605 | ENDPROC(early_idt_handler) |
| 601 | 606 | ||
