Commit 6fd36ba0 authored by Mathias Nyman's avatar Mathias Nyman Committed by Ingo Molnar

x86, ioapic: Only print ioapic debug information for IRQs belonging to an ioapic chip

with "apic=verbose" the print_IO_APIC() function tries to print
IRQ to pin mappings for every active irq. It assumes chip_data
is of type irq_cfg and may cause an oops if not.

As the print_IO_APIC() is called from a late_initcall other
chained irq chips may already be registered with custom
chip_data information, causing an oops. This is the case with
intel MID SoC devices with gpio demuxers registered as irq_chips.
Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
[ -v2: fixed build failure ]
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 064a59b6
...@@ -1694,6 +1694,7 @@ __apicdebuginit(void) print_IO_APICs(void) ...@@ -1694,6 +1694,7 @@ __apicdebuginit(void) print_IO_APICs(void)
int ioapic_idx; int ioapic_idx;
struct irq_cfg *cfg; struct irq_cfg *cfg;
unsigned int irq; unsigned int irq;
struct irq_chip *chip;
printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries); printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries);
for (ioapic_idx = 0; ioapic_idx < nr_ioapics; ioapic_idx++) for (ioapic_idx = 0; ioapic_idx < nr_ioapics; ioapic_idx++)
...@@ -1714,6 +1715,10 @@ __apicdebuginit(void) print_IO_APICs(void) ...@@ -1714,6 +1715,10 @@ __apicdebuginit(void) print_IO_APICs(void)
for_each_active_irq(irq) { for_each_active_irq(irq) {
struct irq_pin_list *entry; struct irq_pin_list *entry;
chip = irq_get_chip(irq);
if (chip != &ioapic_chip)
continue;
cfg = irq_get_chip_data(irq); cfg = irq_get_chip_data(irq);
if (!cfg) if (!cfg)
continue; continue;
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/mach_traps.h> #include <asm/mach_traps.h>
#include <asm/nmi.h> #include <asm/nmi.h>
#include <asm/x86_init.h>
#define NMI_MAX_NAMELEN 16 #define NMI_MAX_NAMELEN 16
struct nmiaction { struct nmiaction {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment