diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2011-03-23 21:09:04 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2011-03-25 18:45:18 +0100 |
commit | 930cd54b3bd78e52991a89b39b5ef58355ad2b6d (patch) | |
tree | 48699521917d84863846f3e7638c4178dfa9fbf5 /arch/mips/kernel | |
parent | 2a2b2212986a4072d11e521a63672e3219173437 (diff) | |
download | kernel_goldelico_gta04-930cd54b3bd78e52991a89b39b5ef58355ad2b6d.zip kernel_goldelico_gta04-930cd54b3bd78e52991a89b39b5ef58355ad2b6d.tar.gz kernel_goldelico_gta04-930cd54b3bd78e52991a89b39b5ef58355ad2b6d.tar.bz2 |
MIPS: SMTC: Cleanup the hook mess and use irq_data
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
To: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2194/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel')
-rw-r--r-- | arch/mips/kernel/irq.c | 6 | ||||
-rw-r--r-- | arch/mips/kernel/smtc.c | 12 |
2 files changed, 8 insertions, 10 deletions
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index 4f93db5..779b787 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c @@ -183,8 +183,8 @@ void __irq_entry do_IRQ(unsigned int irq) { irq_enter(); check_stack_overflow(); - __DO_IRQ_SMTC_HOOK(irq); - generic_handle_irq(irq); + if (!smtc_handle_on_other_cpu(irq)) + generic_handle_irq(irq); irq_exit(); } @@ -197,7 +197,7 @@ void __irq_entry do_IRQ(unsigned int irq) void __irq_entry do_IRQ_no_affinity(unsigned int irq) { irq_enter(); - __NO_AFFINITY_IRQ_SMTC_HOOK(irq); + smtc_im_backstop(irq); generic_handle_irq(irq); irq_exit(); } diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index 14c6423..f7e2c78 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c @@ -677,9 +677,9 @@ void smtc_set_irq_affinity(unsigned int irq, cpumask_t affinity) */ } -void smtc_forward_irq(unsigned int irq) +void smtc_forward_irq(struct irq_data *d) { - struct irq_data *d = irq_get_irq_data(irq); + unsigned int irq = d->irq; int target; /* @@ -708,12 +708,10 @@ void smtc_forward_irq(unsigned int irq) */ /* If no one is eligible, service locally */ - if (target >= NR_CPUS) { + if (target >= NR_CPUS) do_IRQ_no_affinity(irq); - return; - } - - smtc_send_ipi(target, IRQ_AFFINITY_IPI, irq); + else + smtc_send_ipi(target, IRQ_AFFINITY_IPI, irq); } #endif /* CONFIG_MIPS_MT_SMTC_IRQAFF */ |