Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[platform/kernel/linux-rpi.git] / arch / x86 / kvm / vmx / vmx_ops.h
index 67f7452..5e7f412 100644 (file)
@@ -105,9 +105,11 @@ do_exception:
                      * @field, and bounce through the trampoline to preserve
                      * volatile registers.
                      */
-                    "push $0\n\t"
+                    "xorl %k1, %k1\n\t"
+                    "2:\n\t"
+                    "push %1\n\t"
                     "push %2\n\t"
-                    "2:call vmread_error_trampoline\n\t"
+                    "call vmread_error_trampoline\n\t"
 
                     /*
                      * Unwind the stack.  Note, the trampoline zeros out the
@@ -118,13 +120,9 @@ do_exception:
                     "3:\n\t"
 
                     /* VMREAD faulted.  As above, except push '1' for @fault. */
-                    ".pushsection .fixup, \"ax\"\n\t"
-                    "4: push $1\n\t"
-                    "push %2\n\t"
-                    "jmp 2b\n\t"
-                    ".popsection\n\t"
-                    _ASM_EXTABLE(1b, 4b)
-                    : ASM_CALL_CONSTRAINT, "=r"(value) : "r"(field) : "cc");
+                    _ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_ONE_REG, %1)
+
+                    : ASM_CALL_CONSTRAINT, "=&r"(value) : "r"(field) : "cc");
        return value;
 
 #endif /* CONFIG_CC_HAS_ASM_GOTO_OUTPUT */