]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
KVM: arm/arm64: simplify vgic_find_range() and callers
authorAndre Przywara <andre.przywara@arm.com>
Thu, 26 Mar 2015 14:39:33 +0000 (14:39 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Thu, 26 Mar 2015 21:43:14 +0000 (21:43 +0000)
The vgic_find_range() function in vgic.c takes a struct kvm_exit_mmio
argument, but actually only used the length field in there. Since we
need to get rid of that structure in that part of the code anyway,
let's rework the function (and it's callers) to pass the length
argument to the function directly.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
virt/kvm/arm/vgic-v2-emul.c
virt/kvm/arm/vgic.c
virt/kvm/arm/vgic.h

index ddb3135363d84003a6e00f816787edfa90255b20..1dd183ecf96ffc9fac320154e2fc937e12e8a68d 100644 (file)
@@ -715,7 +715,7 @@ static int vgic_attr_regs_access(struct kvm_device *dev,
        default:
                BUG();
        }
-       r = vgic_find_range(ranges, &mmio, offset);
+       r = vgic_find_range(ranges, 4, offset);
 
        if (unlikely(!r || !r->handle_mmio)) {
                ret = -ENXIO;
index 21a3550d525cc641bf862c6965756117ef5b2d20..8802ad73467f9b6e2fdf595752ea343209a7c3e0 100644 (file)
@@ -713,16 +713,13 @@ void vgic_unqueue_irqs(struct kvm_vcpu *vcpu)
 
 const
 struct vgic_io_range *vgic_find_range(const struct vgic_io_range *ranges,
-                                     struct kvm_exit_mmio *mmio,
-                                     phys_addr_t offset)
+                                     int len, gpa_t offset)
 {
-       const struct vgic_io_range *r = ranges;
-
-       while (r->len) {
-               if (offset >= r->base &&
-                   (offset + mmio->len) <= (r->base + r->len))
-                       return r;
-               r++;
+       while (ranges->len) {
+               if (offset >= ranges->base &&
+                   (offset + len) <= (ranges->base + ranges->len))
+                       return ranges;
+               ranges++;
        }
 
        return NULL;
@@ -813,7 +810,7 @@ bool vgic_handle_mmio_range(struct kvm_vcpu *vcpu, struct kvm_run *run,
        unsigned long offset;
 
        offset = mmio->phys_addr - mmio_base;
-       range = vgic_find_range(ranges, mmio, offset);
+       range = vgic_find_range(ranges, mmio->len, offset);
        if (unlikely(!range || !range->handle_mmio)) {
                pr_warn("Unhandled access %d %08llx %d\n",
                        mmio->is_write, mmio->phys_addr, mmio->len);
@@ -1986,10 +1983,7 @@ int vgic_get_common_attr(struct kvm_device *dev, struct kvm_device_attr *attr)
 
 int vgic_has_attr_regs(const struct vgic_io_range *ranges, phys_addr_t offset)
 {
-       struct kvm_exit_mmio dev_attr_mmio;
-
-       dev_attr_mmio.len = 4;
-       if (vgic_find_range(ranges, &dev_attr_mmio, offset))
+       if (vgic_find_range(ranges, 4, offset))
                return 0;
        else
                return -ENXIO;
index 6fccb969b169f148a185672d3c4ce64f2b8ed9c2..01aa6228f88b044d4e02a578e18508c86bdfb3dd 100644 (file)
@@ -90,8 +90,7 @@ static inline bool is_in_range(phys_addr_t addr, unsigned long len,
 
 const
 struct vgic_io_range *vgic_find_range(const struct vgic_io_range *ranges,
-                                     struct kvm_exit_mmio *mmio,
-                                     phys_addr_t offset);
+                                     int len, gpa_t offset);
 
 bool vgic_handle_mmio_range(struct kvm_vcpu *vcpu, struct kvm_run *run,
                            struct kvm_exit_mmio *mmio,