diff options
author | Alex Shi <alex.shi@linaro.org> | 2015-03-19 09:03:10 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2015-03-19 09:03:10 +0800 |
commit | 47bbd44e18034d3277a29459d1f0c45e8d1c8d3e (patch) | |
tree | 3ebdf7ef86be88fe0fbfeb378dc949ea59125d16 /arch/x86 | |
parent | 0d590a1ecd1ad44b2dae2bcdc5a6cb24a7080489 (diff) | |
parent | 8a5f782c33c04ea5c9b3ca6fb32d6039e2e5c0c9 (diff) |
Merge tag 'v3.14.36' into linux-linaro-lsk-v3.14
This is the 3.14.36 stable release
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 13 | ||||
-rw-r--r-- | arch/x86/kvm/emulate.c | 3 |
2 files changed, 10 insertions, 6 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 02553d6d183d..06469ee0f26e 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -542,11 +542,14 @@ ENTRY(ret_from_fork) testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread? jz 1f - testl $_TIF_IA32, TI_flags(%rcx) # 32-bit compat task needs IRET - jnz int_ret_from_sys_call - - RESTORE_TOP_OF_STACK %rdi, -ARGOFFSET - jmp ret_from_sys_call # go to the SYSRET fastpath + /* + * By the time we get here, we have no idea whether our pt_regs, + * ti flags, and ti status came from the 64-bit SYSCALL fast path, + * the slow path, or one of the ia32entry paths. + * Use int_ret_from_sys_call to return, since it can safely handle + * all of the above. + */ + jmp int_ret_from_sys_call 1: subq $REST_SKIP, %rsp # leave space for volatiles diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 38d3751472e4..09651d4a9038 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -4646,7 +4646,8 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) if (rc != X86EMUL_CONTINUE) goto done; } - ctxt->dst.orig_val = ctxt->dst.val; + /* Copy full 64-bit value for CMPXCHG8B. */ + ctxt->dst.orig_val64 = ctxt->dst.val64; special_insn: |