Thread (63 messages) 63 messages, 5 authors, 2021-09-14

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

From: Raghavendra Rao Ananta <hidden>
Date: 2021-09-09 16:39:14
Also in: kvm, kvmarm, lkml

On Wed, Sep 8, 2021 at 10:18 PM Oliver Upton [off-list ref] wrote:
On Thu, Sep 09, 2021 at 01:38:11AM +0000, Raghavendra Rao Ananta wrote:
quoted
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 <redacted>
Reviewed-by: Andrew Jones <redacted>
---
 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
[...]
quoted
+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.
Huh, I thought I had a default case covering this (must have gone lost
during code reorg).
Nice catch though! Surprisingly, the compiler never warned. I'm not
sure if its smart
enough to figure out that the caller of this function had
GUEST_ASSERT(type < GIC_TYPE_MAX);
Anyway, I'll clean it up.

Regards,
Raghavendra
quoted
+     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);
+}
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help