[PATCH v3 5/9] KVM: arm-vgic: Make vgic mmio functions more generic
Marc Zyngier
marc.zyngier at arm.com
Mon Dec 9 10:47:32 EST 2013
On 2013-11-17 04:30, Christoffer Dall wrote:
> Rename the vgic_ranges array to vgic_dist_ranges to be more specific
> and
> to prepare for handling CPU interface register access as well (for
> save/restore of VGIC state).
>
> Pass offset from distributor or interface MMIO base to
> find_matching_range function instead of the physical address of the
> access in the VM memory map. This allows other callers unaware of
> the
> VM specifics, but with generic VGIC knowledge to reuse the function.
>
> Signed-off-by: Christoffer Dall <christoffer.dall at linaro.org>
Acked-by: Marc Zyngier <marc.zyngier at arm.com>
> ---
> virt/kvm/arm/vgic.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
> index edca754..9b9fa20 100644
> --- a/virt/kvm/arm/vgic.c
> +++ b/virt/kvm/arm/vgic.c
> @@ -602,7 +602,7 @@ struct mmio_range {
> phys_addr_t offset);
> };
>
> -static const struct mmio_range vgic_ranges[] = {
> +static const struct mmio_range vgic_dist_ranges[] = {
> {
> .base = GIC_DIST_CTRL,
> .len = 12,
> @@ -669,14 +669,13 @@ static const struct mmio_range vgic_ranges[] =
> {
> static const
> struct mmio_range *find_matching_range(const struct mmio_range
> *ranges,
> struct kvm_exit_mmio *mmio,
> - phys_addr_t base)
> + phys_addr_t offset)
> {
> const struct mmio_range *r = ranges;
> - phys_addr_t addr = mmio->phys_addr - base;
>
> while (r->len) {
> - if (addr >= r->base &&
> - (addr + mmio->len) <= (r->base + r->len))
> + if (offset >= r->base &&
> + (offset + mmio->len) <= (r->base + r->len))
> return r;
> r++;
> }
> @@ -713,7 +712,8 @@ bool vgic_handle_mmio(struct kvm_vcpu *vcpu,
> struct kvm_run *run,
> return true;
> }
>
> - range = find_matching_range(vgic_ranges, mmio, base);
> + offset = mmio->phys_addr - base;
> + range = find_matching_range(vgic_dist_ranges, mmio, offset);
> if (unlikely(!range || !range->handle_mmio)) {
> pr_warn("Unhandled access %d %08llx %d\n",
> mmio->is_write, mmio->phys_addr, mmio->len);
--
Fast, cheap, reliable. Pick two.
More information about the linux-arm-kernel
mailing list