Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[linux-2.6-microblaze.git] / arch / x86 / kvm / emulate.c
index b9b09fe..0f62943 100644 (file)
@@ -309,23 +309,29 @@ static void invalidate_registers(struct x86_emulate_ctxt *ctxt)
 
 static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
 
-#define FOP_ALIGN ".align " __stringify(FASTOP_SIZE) " \n\t"
+#define FOP_FUNC(name) \
+       ".align " __stringify(FASTOP_SIZE) " \n\t" \
+       ".type " name ", @function \n\t" \
+       name ":\n\t"
+
 #define FOP_RET   "ret \n\t"
 
 #define FOP_START(op) \
        extern void em_##op(struct fastop *fake); \
        asm(".pushsection .text, \"ax\" \n\t" \
            ".global em_" #op " \n\t" \
-            FOP_ALIGN \
-           "em_" #op ": \n\t"
+           FOP_FUNC("em_" #op)
 
 #define FOP_END \
            ".popsection")
 
-#define FOPNOP() FOP_ALIGN FOP_RET
+#define FOPNOP() \
+       FOP_FUNC(__stringify(__UNIQUE_ID(nop))) \
+       FOP_RET
 
 #define FOP1E(op,  dst) \
-       FOP_ALIGN "10: " #op " %" #dst " \n\t" FOP_RET
+       FOP_FUNC(#op "_" #dst) \
+       "10: " #op " %" #dst " \n\t" FOP_RET
 
 #define FOP1EEX(op,  dst) \
        FOP1E(op, dst) _ASM_EXTABLE(10b, kvm_fastop_exception)
@@ -357,7 +363,8 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
        FOP_END
 
 #define FOP2E(op,  dst, src)      \
-       FOP_ALIGN #op " %" #src ", %" #dst " \n\t" FOP_RET
+       FOP_FUNC(#op "_" #dst "_" #src) \
+       #op " %" #src ", %" #dst " \n\t" FOP_RET
 
 #define FASTOP2(op) \
        FOP_START(op) \
@@ -395,7 +402,8 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
        FOP_END
 
 #define FOP3E(op,  dst, src, src2) \
-       FOP_ALIGN #op " %" #src2 ", %" #src ", %" #dst " \n\t" FOP_RET
+       FOP_FUNC(#op "_" #dst "_" #src "_" #src2) \
+       #op " %" #src2 ", %" #src ", %" #dst " \n\t" FOP_RET
 
 /* 3-operand, word-only, src2=cl */
 #define FASTOP3WCL(op) \
@@ -407,7 +415,12 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *));
        FOP_END
 
 /* Special case for SETcc - 1 instruction per cc */
-#define FOP_SETCC(op) ".align 4; " #op " %al; ret \n\t"
+#define FOP_SETCC(op) \
+       ".align 4 \n\t" \
+       ".type " #op ", @function \n\t" \
+       #op ": \n\t" \
+       #op " %al \n\t" \
+       FOP_RET
 
 asm(".global kvm_fastop_exception \n"
     "kvm_fastop_exception: xor %esi, %esi; ret");
@@ -956,7 +969,7 @@ static int em_bsr_c(struct x86_emulate_ctxt *ctxt)
        return fastop(ctxt, em_bsr);
 }
 
-static u8 test_cc(unsigned int condition, unsigned long flags)
+static __always_inline u8 test_cc(unsigned int condition, unsigned long flags)
 {
        u8 rc;
        void (*fop)(void) = (void *)em_setcc + 4 * (condition & 0xf);