diff options
author | Jes Sorensen <jes@sgi.com> | 2008-05-20 13:13:50 +0200 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-06-06 21:08:25 +0300 |
commit | f20d2752980c144c82649eb18746ef0c29f508dd (patch) | |
tree | c80876c536a9f26cb4147202cbbab9f1bd4862a6 | |
parent | 39b945a37bac2b692773a470890c8ba301485b15 (diff) | |
download | kernel_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.c | 3 |
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: |