aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJes Sorensen <jes@sgi.com>2008-05-20 13:13:50 +0200
committerAvi Kivity <avi@qumranet.com>2008-06-06 21:08:25 +0300
commitf20d2752980c144c82649eb18746ef0c29f508dd (patch)
treec80876c536a9f26cb4147202cbbab9f1bd4862a6
parent39b945a37bac2b692773a470890c8ba301485b15 (diff)
downloadkernel_samsung_smdk4412-f20d2752980c144c82649eb18746ef0c29f508dd.zip
kernel_samsung_smdk4412-f20d2752980c144c82649eb18746ef0c29f508dd.tar.gz
kernel_samsung_smdk4412-f20d2752980c144c82649eb18746ef0c29f508dd.tar.bz2
KVM: ia64: fix zero extending for mmio ld1/2/4 emulation in KVM
Only copy in the data actually requested by the instruction emulation and zero pad the destination register first. This avoids the problem where emulated mmio access got garbled data from ld2.acq instructions in the vga console driver. Signed-off-by: Jes Sorensen <jes@sgi.com> Acked-by: Xiantao Zhang <xiantao.zhang@intel.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r--arch/ia64/kvm/mmio.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/ia64/kvm/mmio.c b/arch/ia64/kvm/mmio.c
index 351bf70..7f1a858 100644
--- a/arch/ia64/kvm/mmio.c
+++ b/arch/ia64/kvm/mmio.c
@@ -159,7 +159,8 @@ static void mmio_access(struct kvm_vcpu *vcpu, u64 src_pa, u64 *dest,
if (p->u.ioreq.state == STATE_IORESP_READY) {
if (dir == IOREQ_READ)
- *dest = p->u.ioreq.data;
+ /* it's necessary to ensure zero extending */
+ *dest = p->u.ioreq.data & (~0UL >> (64-(s*8)));
} else
panic_vm(vcpu);
out: