Commit bac27d35 authored by Avi Kivity's avatar Avi Kivity Committed by Linus Torvalds

KVM: x86 emulator: fix debug reg mov instructions

More fallout from the writeback fixes: debug register transfer
instructions do their own writeback and thus need to disable the general
writeback mechanism.

This fixes oopses and some guest failures on AMD machines (the Intel
variant decodes the instruction in hardware and thus does not need
emulation).

Cc: Alistair John Strachan <alistair@devzero.co.uk>
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9e865f58
...@@ -1217,11 +1217,13 @@ x86_emulate_memop(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) ...@@ -1217,11 +1217,13 @@ x86_emulate_memop(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
} }
break; break;
case 0x21: /* mov from dr to reg */ case 0x21: /* mov from dr to reg */
no_wb = 1;
if (modrm_mod != 3) if (modrm_mod != 3)
goto cannot_emulate; goto cannot_emulate;
rc = emulator_get_dr(ctxt, modrm_reg, &_regs[modrm_rm]); rc = emulator_get_dr(ctxt, modrm_reg, &_regs[modrm_rm]);
break; break;
case 0x23: /* mov from reg to dr */ case 0x23: /* mov from reg to dr */
no_wb = 1;
if (modrm_mod != 3) if (modrm_mod != 3)
goto cannot_emulate; goto cannot_emulate;
rc = emulator_set_dr(ctxt, modrm_reg, _regs[modrm_rm]); rc = emulator_set_dr(ctxt, modrm_reg, _regs[modrm_rm]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment