aboutsummaryrefslogtreecommitdiffstats
path: root/arm
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2014-04-17 15:57:48 +0100
committerWill Deacon <will.deacon@arm.com>2015-06-01 16:39:55 +0100
commitc3e5e10138b691ef672fdf4008eb82d6ec40ffcd (patch)
treed4a94360e7b85b5ef0ef2df10bfbaed8ece70328 /arm
parent1fcf0d7773bf99d0357bc647304541d4dbaf2611 (diff)
downloadkvmtool-c3e5e10138b691ef672fdf4008eb82d6ec40ffcd.tar.gz
kvm tools: ARM: allow potential relocation of IO port
Whilst our IO port is fixed at CPU physical address 0x0, changing ARM_IOPORT_AREA should be all that's necessary to move it around in CPU physical space (it will still be at 0x0 in the bus address space). This patch ensures we subtract KVM_IOPORT_AREA from the faulting CPU physical address when calculating the port for kvm__emulate_io. Reported-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'arm')
-rw-r--r--arm/kvm-cpu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c
index b017994f..9c9616f3 100644
--- a/arm/kvm-cpu.c
+++ b/arm/kvm-cpu.c
@@ -105,7 +105,7 @@ bool kvm_cpu__emulate_mmio(struct kvm *kvm, u64 phys_addr, u8 *data, u32 len,
return kvm__emulate_mmio(kvm, phys_addr, data, len, is_write);
} else if (arm_addr_in_ioport_region(phys_addr)) {
int direction = is_write ? KVM_EXIT_IO_OUT : KVM_EXIT_IO_IN;
- u16 port = phys_addr & USHRT_MAX;
+ u16 port = (phys_addr - KVM_IOPORT_AREA) & USHRT_MAX;
return kvm__emulate_io(kvm, port, data, direction, len, 1);
} else if (arm_addr_in_pci_region(phys_addr)) {
return kvm__emulate_mmio(kvm, phys_addr, data, len, is_write);