]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
KVM: ia64: fix zero extending for mmio ld1/2/4 emulation in KVM
authorJes Sorensen <jes@sgi.com>
Tue, 20 May 2008 11:13:50 +0000 (13:13 +0200)
committerAvi Kivity <avi@qumranet.com>
Fri, 6 Jun 2008 18:08:25 +0000 (21:08 +0300)
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>
arch/ia64/kvm/mmio.c

index 351bf70da46333d5c8eb67b28a3a976680658c4a..7f1a858bc69f64c0156748e1d07c14f42066d208 100644 (file)
@@ -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: