KVM: emulator: make x86 emulation modes enum instead of defines
Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
716d51abff
commit
9d1b39a967
2 changed files with 13 additions and 13 deletions
|
@ -249,6 +249,15 @@ struct read_cache {
|
||||||
unsigned long end;
|
unsigned long end;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Execution mode, passed to the emulator. */
|
||||||
|
enum x86emul_mode {
|
||||||
|
X86EMUL_MODE_REAL, /* Real mode. */
|
||||||
|
X86EMUL_MODE_VM86, /* Virtual 8086 mode. */
|
||||||
|
X86EMUL_MODE_PROT16, /* 16-bit protected mode. */
|
||||||
|
X86EMUL_MODE_PROT32, /* 32-bit protected mode. */
|
||||||
|
X86EMUL_MODE_PROT64, /* 64-bit (long) mode. */
|
||||||
|
};
|
||||||
|
|
||||||
struct x86_emulate_ctxt {
|
struct x86_emulate_ctxt {
|
||||||
const struct x86_emulate_ops *ops;
|
const struct x86_emulate_ops *ops;
|
||||||
|
|
||||||
|
@ -256,7 +265,7 @@ struct x86_emulate_ctxt {
|
||||||
unsigned long eflags;
|
unsigned long eflags;
|
||||||
unsigned long eip; /* eip before instruction emulation */
|
unsigned long eip; /* eip before instruction emulation */
|
||||||
/* Emulated execution mode, represented by an X86EMUL_MODE value. */
|
/* Emulated execution mode, represented by an X86EMUL_MODE value. */
|
||||||
int mode;
|
enum x86emul_mode mode;
|
||||||
|
|
||||||
/* interruptibility state, as a result of execution of STI or MOV SS */
|
/* interruptibility state, as a result of execution of STI or MOV SS */
|
||||||
int interruptibility;
|
int interruptibility;
|
||||||
|
@ -308,17 +317,6 @@ struct x86_emulate_ctxt {
|
||||||
#define REPE_PREFIX 0xf3
|
#define REPE_PREFIX 0xf3
|
||||||
#define REPNE_PREFIX 0xf2
|
#define REPNE_PREFIX 0xf2
|
||||||
|
|
||||||
/* Execution mode, passed to the emulator. */
|
|
||||||
#define X86EMUL_MODE_REAL 0 /* Real mode. */
|
|
||||||
#define X86EMUL_MODE_VM86 1 /* Virtual 8086 mode. */
|
|
||||||
#define X86EMUL_MODE_PROT16 2 /* 16-bit protected mode. */
|
|
||||||
#define X86EMUL_MODE_PROT32 4 /* 32-bit protected mode. */
|
|
||||||
#define X86EMUL_MODE_PROT64 8 /* 64-bit (long) mode. */
|
|
||||||
|
|
||||||
/* any protected mode */
|
|
||||||
#define X86EMUL_MODE_PROT (X86EMUL_MODE_PROT16|X86EMUL_MODE_PROT32| \
|
|
||||||
X86EMUL_MODE_PROT64)
|
|
||||||
|
|
||||||
/* CPUID vendors */
|
/* CPUID vendors */
|
||||||
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ebx 0x68747541
|
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ebx 0x68747541
|
||||||
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ecx 0x444d4163
|
#define X86EMUL_CPUID_VENDOR_AuthenticAMD_ecx 0x444d4163
|
||||||
|
|
|
@ -2268,6 +2268,8 @@ static int em_sysenter(struct x86_emulate_ctxt *ctxt)
|
||||||
if (msr_data == 0x0)
|
if (msr_data == 0x0)
|
||||||
return emulate_gp(ctxt, 0);
|
return emulate_gp(ctxt, 0);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctxt->eflags &= ~(EFLG_VM | EFLG_IF | EFLG_RF);
|
ctxt->eflags &= ~(EFLG_VM | EFLG_IF | EFLG_RF);
|
||||||
|
@ -4400,7 +4402,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Instruction can only be executed in protected mode */
|
/* Instruction can only be executed in protected mode */
|
||||||
if ((ctxt->d & Prot) && !(ctxt->mode & X86EMUL_MODE_PROT)) {
|
if ((ctxt->d & Prot) && ctxt->mode < X86EMUL_MODE_PROT16) {
|
||||||
rc = emulate_ud(ctxt);
|
rc = emulate_ud(ctxt);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue