aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm
diff options
context:
space:
mode:
authorAvi Kivity <avi@qumranet.com>2007-08-05 03:16:11 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-08-06 20:54:41 -0400
commitbac27d35cbbf7c641efcc75b5330df8717d6db65 (patch)
tree2c4d7ec9c63c9bf8d1cd251b16da07f91c50c7da /drivers/kvm
parent9e865f58da5ff0a9c19669a49ac984117711757a (diff)
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: Avi Kivity <avi@qumranet.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/kvm')
-rw-r--r--drivers/kvm/x86_emulate.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
index 1f979cb0df31..4b8a0cc9665e 100644
--- a/drivers/kvm/x86_emulate.c
+++ b/drivers/kvm/x86_emulate.c
@@ -1217,11 +1217,13 @@ twobyte_insn:
1217 } 1217 }
1218 break; 1218 break;
1219 case 0x21: /* mov from dr to reg */ 1219 case 0x21: /* mov from dr to reg */
1220 no_wb = 1;
1220 if (modrm_mod != 3) 1221 if (modrm_mod != 3)
1221 goto cannot_emulate; 1222 goto cannot_emulate;
1222 rc = emulator_get_dr(ctxt, modrm_reg, &_regs[modrm_rm]); 1223 rc = emulator_get_dr(ctxt, modrm_reg, &_regs[modrm_rm]);
1223 break; 1224 break;
1224 case 0x23: /* mov from reg to dr */ 1225 case 0x23: /* mov from reg to dr */
1226 no_wb = 1;
1225 if (modrm_mod != 3) 1227 if (modrm_mod != 3)
1226 goto cannot_emulate; 1228 goto cannot_emulate;
1227 rc = emulator_set_dr(ctxt, modrm_reg, _regs[modrm_rm]); 1229 rc = emulator_set_dr(ctxt, modrm_reg, _regs[modrm_rm]);