aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/entry_64.S
diff options
context:
space:
mode:
authorBrian Gerst <brgerst@gmail.com>2009-10-12 10:18:23 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-12 12:29:46 -0400
commitae24ffe5ecec17c956ac25371d7c2e12b4b36e53 (patch)
treedac0241dcc85e8ec6e8fe25705fce8bf7f4ea57e /arch/x86/kernel/entry_64.S
parentf3834b9ef68067199486740b31f691afb14dbdf5 (diff)
x86, 64-bit: Move K8 B step iret fixup to fault entry asm
Move the handling of truncated %rip from an iret fault to the fault entry path. This allows x86-64 to use the standard search_extable() function. Signed-off-by: Brian Gerst <brgerst@gmail.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Jan Beulich <jbeulich@novell.com> LKML-Reference: <1255357103-5418-1-git-send-email-brgerst@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/entry_64.S')
-rw-r--r--arch/x86/kernel/entry_64.S11
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
1501bstep_iret:
1502 /* Fix truncated RIP */
1503 movq %rcx,RIP+8(%rsp)
1504 je error_swapgs
1500END(error_entry) 1505END(error_entry)
1501 1506
1502 1507