[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xen: include MSI/MSI-X information in interrupt debug output
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1238495972 -3600 # Node ID 1f893d68a6ad79e60348a4e27aec23157240d054 # Parent d64a487d6c32e43864d4ccca065d87606ff7b737 xen: include MSI/MSI-X information in interrupt debug output With per-domain irq-to-vector mappings, dump_irqs() omitted some vectors. This patch cycles through the vectors rather than interrupts and prints the same debug information. The patch also prints out information about mapped but unbound interrupts. Signed-off-by: Rolf Neugebauer <rolf.neugebauer@xxxxxxxxxxxxx> --- xen/arch/x86/irq.c | 38 ++++++++++++++++++++++---------------- 1 files changed, 22 insertions(+), 16 deletions(-) diff -r d64a487d6c32 -r 1f893d68a6ad xen/arch/x86/irq.c --- a/xen/arch/x86/irq.c Tue Mar 31 11:38:05 2009 +0100 +++ b/xen/arch/x86/irq.c Tue Mar 31 11:39:32 2009 +0100 @@ -1069,7 +1069,7 @@ extern void dump_ioapic_irq_info(void); static void dump_irqs(unsigned char key) { - int i, irq, vector; + int i, glob_irq, irq, vector; irq_desc_t *desc; irq_guest_action_t *action; struct domain *d; @@ -1077,41 +1077,47 @@ static void dump_irqs(unsigned char key) printk("Guest interrupt information:\n"); - for ( irq = 0; irq < NR_IRQS; irq++ ) - { - vector = irq_to_vector(irq); - if ( vector == 0 ) + for ( vector = 0; vector < NR_VECTORS; vector++ ) + { + + glob_irq = vector_to_irq(vector); + + desc = &irq_desc[vector]; + if ( desc == NULL || desc->handler == &no_irq_type ) continue; - desc = &irq_desc[vector]; - spin_lock_irqsave(&desc->lock, flags); - if ( desc->status & IRQ_GUEST ) + if ( !(desc->status & IRQ_GUEST) ) + printk(" Vec%3d IRQ%3d: type=%-15s status=%08x " + "mapped, unbound\n", + vector, glob_irq, desc->handler->typename, desc->status); + else { action = (irq_guest_action_t *)desc->action; - printk(" IRQ%3d Vec%3d: type=%-15s status=%08x " + printk(" Vec%3d IRQ%3d: type=%-15s status=%08x " "in-flight=%d domain-list=", - irq, vector, desc->handler->typename, + vector, glob_irq, desc->handler->typename, desc->status, action->in_flight); for ( i = 0; i < action->nr_guests; i++ ) { d = action->guest[i]; - printk("%u(%c%c%c%c)", - d->domain_id, - (test_bit(d->pirq_to_evtchn[irq], + irq = domain_vector_to_irq(d, vector); + printk("%u:%3d(%c%c%c%c)", + d->domain_id, irq, + (test_bit(d->pirq_to_evtchn[glob_irq], &shared_info(d, evtchn_pending)) ? 'P' : '-'), - (test_bit(d->pirq_to_evtchn[irq] / + (test_bit(d->pirq_to_evtchn[glob_irq] / BITS_PER_EVTCHN_WORD(d), &vcpu_info(d->vcpu[0], evtchn_pending_sel)) ? 'S' : '-'), - (test_bit(d->pirq_to_evtchn[irq], + (test_bit(d->pirq_to_evtchn[glob_irq], &shared_info(d, evtchn_mask)) ? 'M' : '-'), - (test_bit(irq, d->pirq_mask) ? + (test_bit(glob_irq, d->pirq_mask) ? 'M' : '-')); if ( i != action->nr_guests ) printk(","); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |