From 1242d6a326c5c89d7147523b63d3e6c79b8e8a51 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Wed, 28 Mar 2007 20:04:16 +0200 Subject: [PATCH] --- yaml --- r: 54089 b: refs/heads/master c: df513e2cdd099822ed32cbc20aaf4ff310372202 h: refs/heads/master i: 54087: 302efa45333400171e72bce16eaee63d2a6ce830 v: v3 --- [refs] | 2 +- trunk/drivers/kvm/x86_emulate.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index ab9e5e7969b8..c9dfc14e1570 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: afeb1f14c5478560262b37431726eb0eb1a42e9e +refs/heads/master: df513e2cdd099822ed32cbc20aaf4ff310372202 diff --git a/trunk/drivers/kvm/x86_emulate.c b/trunk/drivers/kvm/x86_emulate.c index 7513cddb929f..bcf872bdaf74 100644 --- a/trunk/drivers/kvm/x86_emulate.c +++ b/trunk/drivers/kvm/x86_emulate.c @@ -833,8 +833,9 @@ x86_emulate_memop(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops) dst.ptr = (unsigned long *)cr2; dst.bytes = (d & ByteOp) ? 1 : op_bytes; if (d & BitOp) { - dst.ptr += src.val / BITS_PER_LONG; - dst.bytes = sizeof(long); + unsigned long mask = ~(dst.bytes * 8 - 1); + + dst.ptr = (void *)dst.ptr + (src.val & mask) / 8; } if (!(d & Mov) && /* optimisation - avoid slow emulated read */ ((rc = ops->read_emulated((unsigned long)dst.ptr,