diff --git a/arm/include/arm-common/kvm-arch.h b/arm/include/arm-common/kvm-arch.h index 082131d..90d6733 100644 --- a/arm/include/arm-common/kvm-arch.h +++ b/arm/include/arm-common/kvm-arch.h @@ -45,18 +45,6 @@ static inline bool arm_addr_in_ioport_region(u64 phys_addr) return phys_addr >= KVM_IOPORT_AREA && phys_addr < limit; } -static inline bool arm_addr_in_virtio_mmio_region(u64 phys_addr) -{ - u64 limit = KVM_VIRTIO_MMIO_AREA + ARM_VIRTIO_MMIO_SIZE; - return phys_addr >= KVM_VIRTIO_MMIO_AREA && phys_addr < limit; -} - -static inline bool arm_addr_in_pci_region(u64 phys_addr) -{ - u64 limit = KVM_PCI_CFG_AREA + ARM_PCI_CFG_SIZE + ARM_PCI_MMIO_SIZE; - return phys_addr >= KVM_PCI_CFG_AREA && phys_addr < limit; -} - struct kvm_arch { /* * We may have to align the guest memory for virtio, so keep the diff --git a/arm/include/arm-common/kvm-cpu-arch.h b/arm/include/arm-common/kvm-cpu-arch.h index 36c7872..329979a 100644 --- a/arm/include/arm-common/kvm-cpu-arch.h +++ b/arm/include/arm-common/kvm-cpu-arch.h @@ -44,8 +44,18 @@ static inline bool kvm_cpu__emulate_io(struct kvm_cpu *vcpu, u16 port, void *dat return false; } -bool kvm_cpu__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, u8 *data, - u32 len, u8 is_write); +static inline bool kvm_cpu__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, + u8 *data, u32 len, u8 is_write) +{ + if (arm_addr_in_ioport_region(phys_addr)) { + int direction = is_write ? KVM_EXIT_IO_OUT : KVM_EXIT_IO_IN; + u16 port = (phys_addr - KVM_IOPORT_AREA) & USHRT_MAX; + + return kvm__emulate_io(vcpu, port, data, direction, len, 1); + } + + return kvm__emulate_mmio(vcpu, phys_addr, data, len, is_write); +} unsigned long kvm_cpu__get_vcpu_mpidr(struct kvm_cpu *vcpu); diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c index ab08815..7780251 100644 --- a/arm/kvm-cpu.c +++ b/arm/kvm-cpu.c @@ -139,22 +139,6 @@ bool kvm_cpu__handle_exit(struct kvm_cpu *vcpu) return false; } -bool kvm_cpu__emulate_mmio(struct kvm_cpu *vcpu, u64 phys_addr, u8 *data, - u32 len, u8 is_write) -{ - if (arm_addr_in_virtio_mmio_region(phys_addr)) { - return kvm__emulate_mmio(vcpu, 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 - KVM_IOPORT_AREA) & USHRT_MAX; - return kvm__emulate_io(vcpu, port, data, direction, len, 1); - } else if (arm_addr_in_pci_region(phys_addr)) { - return kvm__emulate_mmio(vcpu, phys_addr, data, len, is_write); - } - - return false; -} - void kvm_cpu__show_page_tables(struct kvm_cpu *vcpu) { }