diff options
author | Mark Brown <broonie@kernel.org> | 2015-03-20 16:06:36 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-03-20 16:06:36 +0000 |
commit | dfaa816a41e25b4524f93483fc75ff630398b3e5 (patch) | |
tree | ff7b1c05006fa3a7816b03978cb4b2fac524e2bc /arch/x86 | |
parent | 33766107687fabb800cd1b6345333ff042d7e3ef (diff) | |
parent | 47bbd44e18034d3277a29459d1f0c45e8d1c8d3e (diff) |
Merge remote-tracking branch 'lsk/linux-linaro-lsk-v3.14' into linux-linaro-lsk-v3.14
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: |