diff options
Diffstat (limited to 'arch/x86/kernel/entry_64.S')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index b5c061f8f358..af0f4b226dbe 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -1491,12 +1491,17 @@ error_kernelspace: | |||
1491 | leaq irq_return(%rip),%rcx | 1491 | leaq irq_return(%rip),%rcx |
1492 | cmpq %rcx,RIP+8(%rsp) | 1492 | cmpq %rcx,RIP+8(%rsp) |
1493 | je error_swapgs | 1493 | je error_swapgs |
1494 | movl %ecx,%ecx /* zero extend */ | 1494 | movl %ecx,%eax /* zero extend */ |
1495 | cmpq %rcx,RIP+8(%rsp) | 1495 | cmpq %rax,RIP+8(%rsp) |
1496 | je error_swapgs | 1496 | je bstep_iret |
1497 | cmpq $gs_change,RIP+8(%rsp) | 1497 | cmpq $gs_change,RIP+8(%rsp) |
1498 | je error_swapgs | 1498 | je error_swapgs |
1499 | jmp error_sti | 1499 | jmp error_sti |
1500 | |||
1501 | bstep_iret: | ||
1502 | /* Fix truncated RIP */ | ||
1503 | movq %rcx,RIP+8(%rsp) | ||
1504 | je error_swapgs | ||
1500 | END(error_entry) | 1505 | END(error_entry) |
1501 | 1506 | ||
1502 | 1507 | ||