Thread (99 messages) 99 messages, 3 authors, 2020-03-23

Re: [PATCH v5 23/23] KVM: arm64: GICv4.1: Expose HW-based SGIs in debugfs

From: Auger Eric <eric.auger@redhat.com>
Date: 2020-03-19 15:43:22
Also in: kvm, kvmarm, lkml

Hi Marc,

On 3/19/20 4:21 PM, Marc Zyngier wrote:
Hi Eric,

On 2020-03-19 15:05, Auger Eric wrote:
quoted
Hi Marc,

On 3/4/20 9:33 PM, Marc Zyngier wrote:
quoted
The vgic-state debugfs file could do with showing the pending state
of the HW-backed SGIs. Plug it into the low-level code.

Signed-off-by: Marc Zyngier <maz@kernel.org>
---
 virt/kvm/arm/vgic/vgic-debug.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/virt/kvm/arm/vgic/vgic-debug.c
b/virt/kvm/arm/vgic/vgic-debug.c
index cc12fe9b2df3..b13a9e3f99dd 100644
--- a/virt/kvm/arm/vgic/vgic-debug.c
+++ b/virt/kvm/arm/vgic/vgic-debug.c
@@ -178,6 +178,8 @@ static void print_irq_state(struct seq_file *s,
struct vgic_irq *irq,
                 struct kvm_vcpu *vcpu)
 {
     char *type;
+    bool pending;
nit: can be directly initialized to irq->pending_latch
quoted
+
     if (irq->intid < VGIC_NR_SGIS)
         type = "SGI";
     else if (irq->intid < VGIC_NR_PRIVATE_IRQS)
@@ -190,6 +192,16 @@ static void print_irq_state(struct seq_file *s,
struct vgic_irq *irq,
     if (irq->intid ==0 || irq->intid == VGIC_NR_PRIVATE_IRQS)
         print_header(s, irq, vcpu);

+    pending = irq->pending_latch;
+    if (irq->hw && vgic_irq_is_sgi(irq->intid)) {
+        int err;
+
+        err = irq_get_irqchip_state(irq->host_irq,
+                        IRQCHIP_STATE_PENDING,
+                        &pending);
+        WARN_ON_ONCE(err);
+    }
+
     seq_printf(s, "       %s %4d "
               "    %2d "
               "%d%d%d%d%d%d%d "
@@ -201,7 +213,7 @@ static void print_irq_state(struct seq_file *s,
struct vgic_irq *irq,
               "\n",
             type, irq->intid,
             (irq->target_vcpu) ? irq->target_vcpu->vcpu_id : -1,
-            irq->pending_latch,
+            pending,
             irq->line_level,
             irq->active,
             irq->enabled,
The patch looks good to me but I am now lost about how we retrieve the
pending stat of other hw mapped interrupts. Looks we use
irq->pending_latch always. Is that correct?
Correct. GICv4.0 doesn't give us an architectural way to look at the
vLPI pending state (there isn't even a guarantee about when the GIC
will stop writing to memory, if it ever does).

With GICv4.1, you can introspect the HW state for SGIs. You can also
look at the vLPI state by peeking at the virtual pending table, but
you'd need to unmap the VPE first, which I obviously don't want to do
for this debug interface, specially as it can be used whilst the guest
is up and running.
OK for vLPIs, what about other HW mapped IRQs (arch timer?)

Eric
In the future, we'll have to implement that in order to support guest
save/restore from a GICv4.1 system. I haven't given much thought to it
though.
quoted
For the patch:
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Thanks,

        M.

_______________________________________________
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