diff options
Diffstat (limited to 'arch/alpha/kernel/sys_titan.c')
-rw-r--r-- | arch/alpha/kernel/sys_titan.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/alpha/kernel/sys_titan.c b/arch/alpha/kernel/sys_titan.c index 302aab38d95..1473aa0e698 100644 --- a/arch/alpha/kernel/sys_titan.c +++ b/arch/alpha/kernel/sys_titan.c @@ -167,18 +167,18 @@ titan_set_irq_affinity(unsigned int irq, cpumask_t affinity) } static void -titan_device_interrupt(unsigned long vector, struct pt_regs * regs) +titan_device_interrupt(unsigned long vector) { printk("titan_device_interrupt: NOT IMPLEMENTED YET!! \n"); } static void -titan_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) +titan_srm_device_interrupt(unsigned long vector) { int irq; irq = (vector - 0x800) >> 4; - handle_irq(irq, regs); + handle_irq(irq, get_irq_regs()); } @@ -245,6 +245,7 @@ titan_legacy_init_irq(void) void titan_dispatch_irqs(u64 mask, struct pt_regs *regs) { + struct pt_regs *old_regs; unsigned long vector; /* @@ -252,6 +253,7 @@ titan_dispatch_irqs(u64 mask, struct pt_regs *regs) */ mask &= titan_cpu_irq_affinity[smp_processor_id()]; + old_regs = set_irq_regs(regs); /* * Dispatch all requested interrupts */ @@ -263,8 +265,9 @@ titan_dispatch_irqs(u64 mask, struct pt_regs *regs) vector = 0x900 + (vector << 4); /* convert to SRM vector */ /* dispatch it */ - alpha_mv.device_interrupt(vector, regs); + alpha_mv.device_interrupt(vector); } + set_irq_regs(old_regs); } |