mirror of https://gitee.com/openkylin/linux.git
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: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Alan Cox <alan@linux.intel.com> [ -v2: fixed build failure ] Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
064a59b6dd
commit
6fd36ba021
|
@ -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)
|
||||||
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 @@
|
||||||
#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 {
|
||||||
|
|
Loading…
Reference in New Issue