Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 146883
b: refs/heads/master
c: 54ff328
h: refs/heads/master
i:
  146881: ed34a31
  146879: 28e2fab
v: v3
  • Loading branch information
Paul Mundt committed Jun 11, 2009
1 parent 9debd65 commit 37ddb7c
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6a1555fdde407dad23b8a119cf5feeb7c6466de9
refs/heads/master: 54ff328b46e58568c4b3350c2fa3223ef862e5a4
12 changes: 12 additions & 0 deletions trunk/arch/sh/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
7 changes: 2 additions & 5 deletions trunk/arch/sh/kernel/cpu/irq/ipr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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,
Expand Down
10 changes: 4 additions & 6 deletions trunk/drivers/sh/intc.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <linux/sh_intc.h>
#include <linux/sysdev.h>
#include <linux/list.h>
#include <linux/topology.h>

#define _INTC_MK(fn, mode, addr_e, addr_d, width, shift) \
((shift) | ((width) << 5) | ((fn) << 9) | ((mode) << 13) | \
Expand Down Expand Up @@ -671,7 +672,7 @@ unsigned int intc_evt2irq(unsigned int vector)

void __init register_intc_controller(struct intc_desc *desc)
{
unsigned int i, k, smp, cpu = smp_processor_id();
unsigned int i, k, smp;
struct intc_desc_int *d;

d = alloc_bootmem(sizeof(*d));
Expand Down Expand Up @@ -771,19 +772,16 @@ void __init register_intc_controller(struct intc_desc *desc)
for (i = 0; i < desc->nr_vectors; i++) {
struct intc_vect *vect = desc->vectors + i;
unsigned int irq = evt2irq(vect->vect);
#ifdef CONFIG_SPARSE_IRQ
struct irq_desc *irq_desc;
#endif

if (!vect->enum_id)
continue;

#ifdef CONFIG_SPARSE_IRQ
irq_desc = irq_to_desc_alloc_cpu(irq, cpu);
irq_desc = irq_to_desc_alloc_node(irq, numa_node_id());
if (unlikely(!irq_desc)) {
printk(KERN_INFO "can not get irq_desc for %d\n", irq);
continue;
}
#endif

intc_register_irq(desc, d, vect->enum_id, irq);
}
Expand Down

0 comments on commit 37ddb7c

Please sign in to comment.