diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-06-11 10:33:09 +0300 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-06-11 10:33:09 +0300 |
commit | 54ff328b46e58568c4b3350c2fa3223ef862e5a4 (patch) | |
tree | 93a39c2dffa2490fd62f6441acba5538abf56b03 /arch | |
parent | 6a1555fdde407dad23b8a119cf5feeb7c6466de9 (diff) |
sh: Tie sparseirq in to Kconfig.
Now that the dependent patches are merged, we are ready to enable
sparseirq support. This simply adds the Kconfig option, and then converts
from the _cpu to the _node allocation routines to follow the upstream
sparseirq API changes.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sh/Kconfig | 12 | ||||
-rw-r--r-- | arch/sh/kernel/cpu/irq/ipr.c | 7 |
2 files changed, 14 insertions, 5 deletions
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index b5629cdc37a..586cd045e2d 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -678,6 +678,18 @@ config GUSA_RB LLSC, this should be more efficient than the other alternative of disabling interrupts around the atomic sequence. +config SPARSE_IRQ + bool "Support sparse irq numbering" + depends on EXPERIMENTAL + help + This enables support for sparse irqs. This is useful in general + as most CPUs have a fairly sparse array of IRQ vectors, which + the irq_desc then maps directly on to. Systems with a high + number of off-chip IRQs will want to treat this as + experimental until they have been independently verified. + + If you don't know what to do here, say N. + endmenu menu "Boot options" diff --git a/arch/sh/kernel/cpu/irq/ipr.c b/arch/sh/kernel/cpu/irq/ipr.c index 6ad40dbad88..808d99a48ef 100644 --- a/arch/sh/kernel/cpu/irq/ipr.c +++ b/arch/sh/kernel/cpu/irq/ipr.c @@ -21,6 +21,7 @@ #include <linux/module.h> #include <linux/io.h> #include <linux/interrupt.h> +#include <linux/topology.h> static inline struct ipr_desc *get_ipr_desc(unsigned int irq) { @@ -59,21 +60,17 @@ void register_ipr_controller(struct ipr_desc *desc) for (i = 0; i < desc->nr_irqs; i++) { struct ipr_data *p = desc->ipr_data + i; -#ifdef CONFIG_SPARSE_IRQ struct irq_desc *irq_desc; -#endif BUG_ON(p->ipr_idx >= desc->nr_offsets); BUG_ON(!desc->ipr_offsets[p->ipr_idx]); -#ifdef CONFIG_SPARSE_IRQ - irq_desc = irq_to_desc_alloc_cpu(p->irq, smp_processor_id()); + irq_desc = irq_to_desc_alloc_node(p->irq, numa_node_id()); if (unlikely(!irq_desc)) { printk(KERN_INFO "can not get irq_desc for %d\n", p->irq); continue; } -#endif disable_irq_nosync(p->irq); set_irq_chip_and_handler_name(p->irq, &desc->chip, |