Patch "KVM: x86: add asm_safe wrapper" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
KVM: x86: add asm_safe wrapper
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kvm-x86-add-asm_safe-wrapper.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
aabba3c6abd50b05b1fc2c6ec44244aa6bcda576Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= <[email protected]>
Date: Tue, 8 Nov 2016 20:54:18 +0100
Subject: KVM: x86: add asm_safe wrapper
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Radim Krčmář <[email protected]>
commit aabba3c6abd50b05b1fc2c6ec44244aa6bcda576 upstream.
Move the existing exception handling for inline assembly into a macro and switch its return values to X86EMUL type.
--- arch/x86/kvm/emulate.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-)
arch/x86/kvm/emulate.c +23 -11
@@ -435,6 +435,26 @@ FOP_END; FOP_START(salc) "pushf; sbb %al, %al; popf \n\t" FOP_RETFOP_END ; +/* +* XXX: inoutclob user must know where the argument is being expanded. +* Relying on CC_HAVE_ASM_GOTO would allow us to remove _fault. +*/ +#define asm_safe(insn, inoutclob...) \ +({ \ + int _fault = 0; \ + \ + asm volatile("1:" insn "\n" \ + "2:\n" \ + ".pushsection .fixup, \"ax\"\n" \ + "3: movl $1, %[_fault]\n" \ + " jmp 2b\n" \ + ".popsection\n" \ + _ASM_EXTABLE(1b, 3b) \ + : [_fault] "+qm"(_fault) inoutclob ); \ + \ + _fault ? X86EMUL_UNHANDLEABLE : X86EMUL_CONTINUE; \ +}) +static int emulator_check_intercept (struct x86_emulate_ctxt *ctxt,enum x86_intercept intercept,enum x86_intercept_stage stage)
@@ -5086,21 +5106,13 @@ static bool string_insn_completed(structstatic int flush_pending_x87_faults (struct x86_emulate_ctxt *ctxt) { -bool fault = false; +int rc; ctxt->ops->get_fpu (ctxt); - asmvolatile ("1: fwait \n\t" -"2: \n\t" -".pushsection .fixup,\"ax\" \n\t" -"3: \n\t" -"movb $1, %[fault] \n\t" -"jmp 2b \n\t" -".popsection \n\t" - _ASM_EXTABLE(1b, 3b) - : [fault]"+qm"(fault)); + rc =asm_safe ("fwait" ); ctxt->ops->put_fpu (ctxt); -if (unlikely (fault)) +if (unlikely (rc !=X86EMUL_CONTINUE ))return emulate_exception (ctxt,MF_VECTOR ,0 , false);return X86EMUL_CONTINUE ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/kvm-x86-add-asm_safe-wrapper.patch queue-4.4/kvm-eventfd-fix-null-deref-irqbypass-consumer.patch queue-4.4/kvm-x86-add-align16-instruction-flag.patch queue-4.4/kvm-x86-emulate-fxsave-and-fxrstor.patch