diff options
author | Paul Mundt <lethal@linux-sh.org> | 2007-03-14 13:03:35 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-03-14 13:03:35 +0900 |
commit | 3afb209a43a4216ad4f1411922d47a44252926c6 (patch) | |
tree | 8c91a9edad3b09181bd290f33f3e14e3d7c01e2c /arch/sh/kernel/irq.c | |
parent | ffe1b4e9f436fd7bb784f3bf7ee963c149fbca5f (diff) | |
download | talos-obmc-linux-3afb209a43a4216ad4f1411922d47a44252926c6.tar.gz talos-obmc-linux-3afb209a43a4216ad4f1411922d47a44252926c6.zip |
sh: Fix bogus regs pointer in do_IRQ().
SH-3 and SH-4 were trampling the register, and SH-2 wasn't even
setting it in the first place. This ended up with some rather
broken behaviour in the sysrq show_regs().
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/irq.c')
-rw-r--r-- | arch/sh/kernel/irq.c | 15 |
1 files changed, 2 insertions, 13 deletions
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 67be2b6e8cd1..9bdd8a00cd4a 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c @@ -11,7 +11,6 @@ #include <linux/module.h> #include <linux/kernel_stat.h> #include <linux/seq_file.h> -#include <linux/io.h> #include <linux/irq.h> #include <asm/processor.h> #include <asm/uaccess.h> @@ -82,13 +81,9 @@ static union irq_ctx *hardirq_ctx[NR_CPUS] __read_mostly; static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; #endif -asmlinkage int do_IRQ(unsigned long r4, unsigned long r5, - unsigned long r6, unsigned long r7, - struct pt_regs __regs) +asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs) { - struct pt_regs *regs = RELOC_HIDE(&__regs, 0); struct pt_regs *old_regs = set_irq_regs(regs); - int irq; #ifdef CONFIG_4KSTACKS union irq_ctx *curctx, *irqctx; #endif @@ -111,13 +106,7 @@ asmlinkage int do_IRQ(unsigned long r4, unsigned long r5, } #endif -#ifdef CONFIG_CPU_HAS_INTEVT - irq = evt2irq(ctrl_inl(INTEVT)); -#else - irq = r4; -#endif - - irq = irq_demux(irq); + irq = irq_demux(evt2irq(irq)); #ifdef CONFIG_4KSTACKS curctx = (union irq_ctx *)current_thread_info(); |