KVM: Deal with interrupt shadow state for emulated instructions
[firefly-linux-kernel-4.4.55.git] / arch / x86 / include / asm / kvm_x86_emulate.h
index 25179a29f208cdac80946c406635a2b8518e4dcd..b7ed2c423116be32942ef23b63e5dc4f09492d9d 100644 (file)
@@ -123,6 +123,7 @@ struct decode_cache {
        u8 ad_bytes;
        u8 rex_prefix;
        struct operand src;
+       struct operand src2;
        struct operand dst;
        bool has_seg_override;
        u8 seg_override;
@@ -142,26 +143,28 @@ struct decode_cache {
        struct fetch_cache fetch;
 };
 
+#define X86_SHADOW_INT_MOV_SS  1
+#define X86_SHADOW_INT_STI     2
+
 struct x86_emulate_ctxt {
        /* Register state before/after emulation. */
        struct kvm_vcpu *vcpu;
 
-       /* Linear faulting address (if emulating a page-faulting instruction) */
        unsigned long eflags;
-
        /* Emulated execution mode, represented by an X86EMUL_MODE value. */
        int mode;
-
        u32 cs_base;
 
-       /* decode cache */
+       /* interruptibility state, as a result of execution of STI or MOV SS */
+       int interruptibility;
 
+       /* decode cache */
        struct decode_cache decode;
 };
 
 /* Repeat String Operation Prefix */
-#define REPE_PREFIX  1
-#define REPNE_PREFIX    2
+#define REPE_PREFIX    1
+#define REPNE_PREFIX   2
 
 /* Execution mode, passed to the emulator. */
 #define X86EMUL_MODE_REAL     0        /* Real mode.             */
@@ -170,7 +173,7 @@ struct x86_emulate_ctxt {
 #define X86EMUL_MODE_PROT64   8        /* 64-bit (long) mode.    */
 
 /* Host execution mode. */
-#if defined(__i386__)
+#if defined(CONFIG_X86_32)
 #define X86EMUL_MODE_HOST X86EMUL_MODE_PROT32
 #elif defined(CONFIG_X86_64)
 #define X86EMUL_MODE_HOST X86EMUL_MODE_PROT64