xen/arm: dump gic debug info from arch_dump_domain_info
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>
Mon, 18 Feb 2013 16:02:28 +0000 (16:02 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Wed, 10 Apr 2013 15:04:48 +0000 (16:04 +0100)
Print some useful GIC debug information when arch_dump_domain_info is
called ('q' debug key).

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
xen/arch/arm/domain.c
xen/arch/arm/gic.c
xen/include/asm-arm/gic.h

index bca3d896230acd6d29842ec7c5b5aa05c5c73af2..ac997d6d15a9ef00456d335346b4e1f8a2963e80 100644 (file)
@@ -617,6 +617,12 @@ int domain_relinquish_resources(struct domain *d)
 
 void arch_dump_domain_info(struct domain *d)
 {
+       struct vcpu *v;
+
+       for_each_vcpu ( d, v )
+       {
+               gic_dump_info(v);
+       }
 }
 
 long arch_do_vcpu_op(int cmd, struct vcpu *v, XEN_GUEST_HANDLE_PARAM(void) arg)
index 41abdfbe41caa61f25e1e63c4d1a4ddb2b6a2bc1..5a380ca1f711084d6bdf29b5051e6a25e74a0d69 100644 (file)
@@ -657,6 +657,33 @@ static void maintenance_interrupt(int irq, void *dev_id, struct cpu_user_regs *r
     }
 }
 
+void gic_dump_info(struct vcpu *v)
+{
+    int i;
+    struct pending_irq *p;
+
+    printk("GICH_LRs (vcpu %d) mask=%llx\n", v->vcpu_id, v->arch.lr_mask);
+    if ( v == current )
+    {
+        for ( i = 0; i < nr_lrs; i++ )
+            printk("   HW_LR[%d]=%x\n", i, GICH[GICH_LR + i]);
+    } else {
+        for ( i = 0; i < nr_lrs; i++ )
+            printk("   VCPU_LR[%d]=%x\n", i, v->arch.gic_lr[i]);
+    }
+
+    list_for_each_entry ( p, &v->arch.vgic.inflight_irqs, inflight )
+    {
+        printk("Inflight irq=%d\n", p->irq);
+    }
+
+    list_for_each_entry( p, &v->arch.vgic.lr_pending, lr_queue )
+    {
+        printk("Pending irq=%d\n", p->irq);
+    }
+
+}
+
 void __cpuinit init_maintenance_interrupt(void)
 {
     request_irq(25, maintenance_interrupt, 0, "irq-maintenance", NULL);
index c6535d1a2e0240cc5e41ad0d6e7ef65d03cd65fc..6bf50bbd9568e64ad312edcc128df2cd1e33e04e 100644 (file)
@@ -157,6 +157,9 @@ extern int gicv_setup(struct domain *d);
 extern void gic_save_state(struct vcpu *v);
 extern void gic_restore_state(struct vcpu *v);
 
+/* print useful debug info */
+extern void gic_dump_info(struct vcpu *v);
+
 #endif /* __ASSEMBLY__ */
 #endif