Re: [PATCH v4 11/18] KVM: arm64: selftests: Add basic GICv3 support

From: Oliver Upton
Date: Thu Sep 09 2021 - 01:19:09 EST


On Thu, Sep 09, 2021 at 01:38:11AM +0000, Raghavendra Rao Ananta wrote:
> Add basic support for ARM Generic Interrupt Controller v3.
> The support provides guests to setup interrupts.
>
> The work is inspired from kvm-unit-tests and the kernel's
> GIC driver (drivers/irqchip/irq-gic-v3.c).
>
> Signed-off-by: Raghavendra Rao Ananta <rananta@xxxxxxxxxx>
> Reviewed-by: Andrew Jones <drjones@xxxxxxxxxx>
> ---
> tools/testing/selftests/kvm/Makefile | 2 +-
> .../selftests/kvm/include/aarch64/gic.h | 21 ++
> tools/testing/selftests/kvm/lib/aarch64/gic.c | 93 +++++++
> .../selftests/kvm/lib/aarch64/gic_private.h | 21 ++
> .../selftests/kvm/lib/aarch64/gic_v3.c | 240 ++++++++++++++++++
> .../selftests/kvm/lib/aarch64/gic_v3.h | 70 +++++
> 6 files changed, 446 insertions(+), 1 deletion(-)
> create mode 100644 tools/testing/selftests/kvm/include/aarch64/gic.h
> create mode 100644 tools/testing/selftests/kvm/lib/aarch64/gic.c
> create mode 100644 tools/testing/selftests/kvm/lib/aarch64/gic_private.h
> create mode 100644 tools/testing/selftests/kvm/lib/aarch64/gic_v3.c
> create mode 100644 tools/testing/selftests/kvm/lib/aarch64/gic_v3.h
>

[...]

> +static void
> +gic_dist_init(enum gic_type type, unsigned int nr_cpus, void *dist_base)
> +{
> + const struct gic_common_ops *gic_ops;

does this need to be initialized? I haven't tried compiling, but it
seems it should trigger a compiler warning as it is only initialized if
type == GIC_V3.

> + spin_lock(&gic_lock);
> +
> + /* Distributor initialization is needed only once per VM */
> + if (gic_common_ops) {
> + spin_unlock(&gic_lock);
> + return;
> + }
> +
> + if (type == GIC_V3)
> + gic_ops = &gicv3_ops;
> +
> + gic_ops->gic_init(nr_cpus, dist_base);
> + gic_common_ops = gic_ops;
> +
> + /* Make sure that the initialized data is visible to all the vCPUs */
> + dsb(sy);
> +
> + spin_unlock(&gic_lock);
> +}