diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-09 23:29:57 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-09 23:29:57 -0800 |
commit | 0b6ca82af83a79f3d1001c8a0701ed34ac38126e (patch) | |
tree | def8eb112c513b21e826e370f2f34249e97914eb /arch/x86/kernel/entry_64.S | |
parent | bfc1de0c40a26c6daa46c297e28138aecb4c5664 (diff) | |
parent | fac84939609a683503947f41eb93e1917d026263 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86
* git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86: (32 commits)
x86: cpa, strict range check in try_preserve_large_page()
x86: cpa, enable CONFIG_DEBUG_PAGEALLOC on 64-bit
x86: cpa, use page pool
x86: introduce page pool in cpa
x86: DEBUG_PAGEALLOC: enable after mem_init()
brk: help text typo fix
lguest: accept guest _PAGE_PWT page table entries
x86 PM: update stale comments
x86 PM: consolidate suspend and hibernation code
x86 PM: rename 32-bit files in arch/x86/power
x86 PM: move 64-bit hibernation files to arch/x86/power
x86: trivial printk optimizations
x86: fix early_ioremap pagetable ops
x86: construct 32-bit boot time page tables in native format.
x86, core: remove CONFIG_FORCED_INLINING
x86: avoid unused variable warning in mm/init_64.c
x86: fixup more paravirt fallout
brk: document randomize_va_space and CONFIG_COMPAT_BRK (was Re:
x86: fix sparse warnings in acpi/bus.c
x86: fix sparse warning in topology.c
...
Diffstat (limited to 'arch/x86/kernel/entry_64.S')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index c7341e81941c..6be39a387c5a 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -581,16 +581,24 @@ retint_restore_args: /* return to kernel space */ */ TRACE_IRQS_IRETQ restore_args: - RESTORE_ARGS 0,8,0 -#ifdef CONFIG_PARAVIRT + RESTORE_ARGS 0,8,0 + +ENTRY(irq_return) INTERRUPT_RETURN -#endif + + .section __ex_table, "a" + .quad irq_return, bad_iret + .previous + +#ifdef CONFIG_PARAVIRT ENTRY(native_iret) iretq .section __ex_table,"a" .quad native_iret, bad_iret .previous +#endif + .section .fixup,"ax" bad_iret: /* @@ -804,7 +812,7 @@ paranoid_swapgs\trace: SWAPGS_UNSAFE_STACK paranoid_restore\trace: RESTORE_ALL 8 - INTERRUPT_RETURN + jmp irq_return paranoid_userspace\trace: GET_THREAD_INFO(%rcx) movl threadinfo_flags(%rcx),%ebx @@ -919,7 +927,7 @@ error_kernelspace: iret run with kernel gs again, so don't set the user space flag. B stepping K8s sometimes report an truncated RIP for IRET exceptions returning to compat mode. Check for these here too. */ - leaq native_iret(%rip),%rbp + leaq irq_return(%rip),%rbp cmpq %rbp,RIP(%rsp) je error_swapgs movl %ebp,%ebp /* zero extend */ |