aboutsummaryrefslogtreecommitdiff
path: root/target-i386
diff options
context:
space:
mode:
authorbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>2007-12-09 23:39:22 +0000
committerbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>2007-12-09 23:39:22 +0000
commitb26177d7ec3f50157a5f37f804ffcace3b2a3945 (patch)
tree51d2290d18125aa102d2b05d76c328b6b7f38ca9 /target-i386
parentdf01e0fc33af5b1247d8ac4bfec5b94466ff69c2 (diff)
Make SVM IOIO intercept check all needed bits, by Bernhard Kauer.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3792 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-i386')
-rw-r--r--target-i386/helper.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/target-i386/helper.c b/target-i386/helper.c
index 07ff3563cc..bad3f7c1b6 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -4262,7 +4262,8 @@ int svm_check_intercept_param(uint32_t type, uint64_t param)
uint64_t addr = ldq_phys(env->vm_vmcb + offsetof(struct vmcb, control.iopm_base_pa));
uint16_t port = (uint16_t) (param >> 16);
- if(ldub_phys(addr + port / 8) & (1 << (port % 8)))
+ uint16_t mask = (1 << ((param >> 4) & 7)) - 1;
+ if(lduw_phys(addr + port / 8) & (mask << (port & 7)))
vmexit(type, param);
}
break;