[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC PATCH] xen/arm: Deliver interrupts to vcpu specified in IROUTER
On Wed, 2014-09-10 at 19:54 +0100, Stefano Stabellini wrote: > The only additional info that Xen provides is via the CTRL-AAA menu. > Some details on the GIC are printed but nothing as well organized as > /proc/interrupts. I've got the following sat in a local branch somewhere. It's not at all what you would want here but it might give a hint as to the sort of approach for adding this stuff. I also posted some perfc stuff back in http://lists.xen.org/archives/html/xen-devel/2014-05/msg01984.html which included various IRQ (rather than GIC) level stats IIRC. Ian. 8<---------------------- commit 2c71c40ef723b90faf14bc513bd71e532beffa08 Author: Ian Campbell <ian.campbell@xxxxxxxxxx> Date: Wed Nov 20 11:54:20 2013 +0000 xen: arm: Add debug keyhandler to dump the physical GIC state. Rename the existing gic_dump_info to gic_dump_info_guest reduce confusion. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- v2: s/gic_dump_info/gic_dump_info_guest/ diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c index 256d9cf..d4ddf41 100644 --- a/xen/arch/arm/gic.c +++ b/xen/arch/arm/gic.c @@ -27,6 +27,7 @@ #include <xen/softirq.h> #include <xen/list.h> #include <xen/device_tree.h> +#include <xen/keyhandler.h> #include <asm/p2m.h> #include <asm/domain.h> #include <asm/platform.h> @@ -161,6 +162,77 @@ int gic_irq_xlate(const u32 *intspec, unsigned int intsize, return 0; } + +static void do_dump_gic(unsigned char key) +{ + int irq; + printk("'%c' pressed -> dumping GIC state\n", key); + + for ( irq = 0; irq < gic.lines; irq++ ) + { + const char *type; + int type_nr, enable, pend, active, priority, target; + struct irq_desc *desc = irq_to_desc(irq); + uint8_t *bytereg; + uint32_t wordreg; + + bytereg = (uint8_t *) (GICD + GICD_ITARGETSR); + target = bytereg[irq]; + + bytereg = (uint8_t *) (GICD + GICD_IPRIORITYR); + priority = bytereg[irq]; + + switch ( irq ) + { + case 0 ... 15: + type = "SGI"; + type_nr = irq; + target = 0x00; /* these are per-CPU */ + break; + case 16 ... 31: + type = "PPI"; + type_nr = irq - 16; + break; + default: + type = "SPI"; + type_nr = irq - 32; + break; + } + + wordreg = GICD[GICD_ISENABLER + irq / 32]; + enable = !!(wordreg & (1u << (irq % 32))); + wordreg = GICD[GICD_ISPENDR + irq / 32]; + pend = !!(wordreg & (1u << (irq % 32))); + wordreg = GICD[GICD_ISACTIVER + irq / 32]; + active = !!(wordreg & (1u << (irq % 32))); + + printk("IRQ%d %s%d: %c%c%c pri:%02x tgt:%02x ", + irq, type, type_nr, + enable ? 'e' : '-', + pend ? 'p' : '-', + active ? 'a' : '-', + priority, target); + + if ( desc->status & IRQ_GUEST ) + { + struct domain *d = desc->action->dev_id; + printk("dom%d %s", d->domain_id, desc->action->name); + } + else + { + printk("Xen"); + } + printk("\n"); + } + +} + +static struct keyhandler dump_gic_keyhandler = { + .irq_callback = 0, + .u.fn = do_dump_gic, + .desc = "dump GIC state" +}; + /* Set up the GIC */ void __init gic_init(void) { @@ -189,6 +261,8 @@ void __init gic_init(void) /* Clear LR mask for cpu0 */ clear_cpu_lr_mask(); + + register_keyhandler('G', &dump_gic_keyhandler); } void send_SGI_mask(const cpumask_t *cpumask, enum gic_sgi sgi) @@ -592,7 +666,7 @@ static void maintenance_interrupt(int irq, void *dev_id, struct cpu_user_regs *r */ } -void gic_dump_info(struct vcpu *v) +void gic_dump_info_guest(struct vcpu *v) { struct pending_irq *p; diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h index a0c07bf..f10ad39 100644 --- a/xen/include/asm-arm/gic.h +++ b/xen/include/asm-arm/gic.h @@ -245,7 +245,7 @@ extern void send_SGI_self(enum gic_sgi sgi); extern void send_SGI_allbutself(enum gic_sgi sgi); /* print useful debug info */ -extern void gic_dump_info(struct vcpu *v); +extern void gic_dump_info_guest(struct vcpu *v); /* Number of interrupt lines */ extern unsigned int gic_number_lines(void); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |