diff options
Diffstat (limited to 'arch/sparc64/kernel/irq.c')
-rw-r--r-- | arch/sparc64/kernel/irq.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c index 4e64724cb9ae..ce05deb1bc92 100644 --- a/arch/sparc64/kernel/irq.c +++ b/arch/sparc64/kernel/irq.c | |||
@@ -547,9 +547,11 @@ void timer_irq(int irq, struct pt_regs *regs) | |||
547 | void handler_irq(int irq, struct pt_regs *regs) | 547 | void handler_irq(int irq, struct pt_regs *regs) |
548 | { | 548 | { |
549 | struct ino_bucket *bucket; | 549 | struct ino_bucket *bucket; |
550 | struct pt_regs *old_regs; | ||
550 | 551 | ||
551 | clear_softint(1 << irq); | 552 | clear_softint(1 << irq); |
552 | 553 | ||
554 | old_regs = set_irq_regs(regs); | ||
553 | irq_enter(); | 555 | irq_enter(); |
554 | 556 | ||
555 | /* Sliiiick... */ | 557 | /* Sliiiick... */ |
@@ -558,12 +560,13 @@ void handler_irq(int irq, struct pt_regs *regs) | |||
558 | struct ino_bucket *next = __bucket(bucket->irq_chain); | 560 | struct ino_bucket *next = __bucket(bucket->irq_chain); |
559 | 561 | ||
560 | bucket->irq_chain = 0; | 562 | bucket->irq_chain = 0; |
561 | __do_IRQ(bucket->virt_irq, regs); | 563 | __do_IRQ(bucket->virt_irq); |
562 | 564 | ||
563 | bucket = next; | 565 | bucket = next; |
564 | } | 566 | } |
565 | 567 | ||
566 | irq_exit(); | 568 | irq_exit(); |
569 | set_irq_regs(old_regs); | ||
567 | } | 570 | } |
568 | 571 | ||
569 | struct sun5_timer { | 572 | struct sun5_timer { |