Loading include/linux/irq.h +4 −0 Original line number Diff line number Diff line Loading @@ -179,7 +179,11 @@ struct irq_desc { const char *name; } ____cacheline_internodealigned_in_smp; #ifdef CONFIG_HAVE_DYN_ARRAY extern struct irq_desc *irq_desc; #else extern struct irq_desc irq_desc[NR_IRQS]; #endif /* * Migration helpers for obsolete names, they will go away: Loading kernel/irq/handle.c +31 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,36 @@ handle_bad_irq(unsigned int irq, struct irq_desc *desc) * Controller mappings for all interrupt sources: */ int nr_irqs = NR_IRQS; #ifdef CONFIG_HAVE_DYN_ARRAY static struct irq_desc irq_desc_init __initdata = { .status = IRQ_DISABLED, .chip = &no_irq_chip, .handle_irq = handle_bad_irq, .depth = 1, .lock = __SPIN_LOCK_UNLOCKED(irq_desc_init.lock), #ifdef CONFIG_SMP .affinity = CPU_MASK_ALL #endif }; static void __init init_work(void *data) { struct dyn_array *da = data; int i; struct irq_desc *desc; desc = *da->name; for (i = 0; i < *da->nr; i++) memcpy(&desc[i], &irq_desc_init, sizeof(struct irq_desc)); } struct irq_desc *irq_desc; DEFINE_DYN_ARRAY(irq_desc, sizeof(struct irq_desc), nr_irqs, PAGE_SIZE, init_work); #else struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = { [0 ... NR_IRQS-1] = { .status = IRQ_DISABLED, Loading @@ -60,6 +90,7 @@ struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = { #endif } }; #endif /* * What should we do if we get a hw irq event on an illegal vector? Loading Loading
include/linux/irq.h +4 −0 Original line number Diff line number Diff line Loading @@ -179,7 +179,11 @@ struct irq_desc { const char *name; } ____cacheline_internodealigned_in_smp; #ifdef CONFIG_HAVE_DYN_ARRAY extern struct irq_desc *irq_desc; #else extern struct irq_desc irq_desc[NR_IRQS]; #endif /* * Migration helpers for obsolete names, they will go away: Loading
kernel/irq/handle.c +31 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,36 @@ handle_bad_irq(unsigned int irq, struct irq_desc *desc) * Controller mappings for all interrupt sources: */ int nr_irqs = NR_IRQS; #ifdef CONFIG_HAVE_DYN_ARRAY static struct irq_desc irq_desc_init __initdata = { .status = IRQ_DISABLED, .chip = &no_irq_chip, .handle_irq = handle_bad_irq, .depth = 1, .lock = __SPIN_LOCK_UNLOCKED(irq_desc_init.lock), #ifdef CONFIG_SMP .affinity = CPU_MASK_ALL #endif }; static void __init init_work(void *data) { struct dyn_array *da = data; int i; struct irq_desc *desc; desc = *da->name; for (i = 0; i < *da->nr; i++) memcpy(&desc[i], &irq_desc_init, sizeof(struct irq_desc)); } struct irq_desc *irq_desc; DEFINE_DYN_ARRAY(irq_desc, sizeof(struct irq_desc), nr_irqs, PAGE_SIZE, init_work); #else struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = { [0 ... NR_IRQS-1] = { .status = IRQ_DISABLED, Loading @@ -60,6 +90,7 @@ struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = { #endif } }; #endif /* * What should we do if we get a hw irq event on an illegal vector? Loading