aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_emulate
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-10-20 15:22:58 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-10-20 15:22:58 +0100
commit372da9b41e0fc70bcf5bb5336b6be461052adfd4 (patch)
treed093f93ab7f6f41be453c8be0f903678acdd28db /xen/arch/x86/x86_emulate
parent9e871a9951eb3ab41422e646154f42661dbae66e (diff)
downloadxen-372da9b41e0fc70bcf5bb5336b6be461052adfd4.tar.gz
xen-372da9b41e0fc70bcf5bb5336b6be461052adfd4.tar.bz2
xen-372da9b41e0fc70bcf5bb5336b6be461052adfd4.zip
x86: add movnti emulation
Linux added the use of movnti for copying from user to kernel space in certain cases, and as per reports we got this may happen with the destination being in MMIO. Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'xen/arch/x86/x86_emulate')
-rw-r--r--xen/arch/x86/x86_emulate/x86_emulate.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c
index 8a6202b934..c68bac53a8 100644
--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -236,7 +236,8 @@ static uint8_t twobyte_table[256] = {
DstReg|SrcMem|ModRM, DstReg|SrcMem|ModRM,
ByteOp|DstReg|SrcMem|ModRM|Mov, DstReg|SrcMem16|ModRM|Mov,
/* 0xC0 - 0xC7 */
- ByteOp|DstMem|SrcReg|ModRM, DstMem|SrcReg|ModRM, 0, 0,
+ ByteOp|DstMem|SrcReg|ModRM, DstMem|SrcReg|ModRM,
+ 0, DstMem|SrcReg|ModRM|Mov,
0, 0, 0, ImplicitOps|ModRM,
/* 0xC8 - 0xCF */
ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps,
@@ -3910,6 +3911,12 @@ x86_emulate(
}
goto add;
+ case 0xc3: /* movnti */
+ /* Ignore the non-temporal hint for now. */
+ generate_exception_if(dst.bytes <= 2, EXC_UD, -1);
+ dst.val = src.val;
+ break;
+
case 0xc7: /* Grp9 (cmpxchg8b/cmpxchg16b) */ {
unsigned long old[2], exp[2], new[2];
unsigned int i;