diff options
Diffstat (limited to 'arch/powerpc/kernel/time.c')
-rw-r--r-- | arch/powerpc/kernel/time.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 85b9244a098c..d210d0a5006b 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
@@ -51,6 +51,7 @@ | |||
51 | #include <linux/rtc.h> | 51 | #include <linux/rtc.h> |
52 | #include <linux/jiffies.h> | 52 | #include <linux/jiffies.h> |
53 | #include <linux/posix-timers.h> | 53 | #include <linux/posix-timers.h> |
54 | #include <linux/irq.h> | ||
54 | 55 | ||
55 | #include <asm/io.h> | 56 | #include <asm/io.h> |
56 | #include <asm/processor.h> | 57 | #include <asm/processor.h> |
@@ -643,6 +644,7 @@ static void iSeries_tb_recal(void) | |||
643 | */ | 644 | */ |
644 | void timer_interrupt(struct pt_regs * regs) | 645 | void timer_interrupt(struct pt_regs * regs) |
645 | { | 646 | { |
647 | struct pt_regs *old_regs; | ||
646 | int next_dec; | 648 | int next_dec; |
647 | int cpu = smp_processor_id(); | 649 | int cpu = smp_processor_id(); |
648 | unsigned long ticks; | 650 | unsigned long ticks; |
@@ -653,9 +655,10 @@ void timer_interrupt(struct pt_regs * regs) | |||
653 | do_IRQ(regs); | 655 | do_IRQ(regs); |
654 | #endif | 656 | #endif |
655 | 657 | ||
658 | old_regs = set_irq_regs(regs); | ||
656 | irq_enter(); | 659 | irq_enter(); |
657 | 660 | ||
658 | profile_tick(CPU_PROFILING, regs); | 661 | profile_tick(CPU_PROFILING); |
659 | calculate_steal_time(); | 662 | calculate_steal_time(); |
660 | 663 | ||
661 | #ifdef CONFIG_PPC_ISERIES | 664 | #ifdef CONFIG_PPC_ISERIES |
@@ -715,6 +718,7 @@ void timer_interrupt(struct pt_regs * regs) | |||
715 | #endif | 718 | #endif |
716 | 719 | ||
717 | irq_exit(); | 720 | irq_exit(); |
721 | set_irq_regs(old_regs); | ||
718 | } | 722 | } |
719 | 723 | ||
720 | void wakeup_decrementer(void) | 724 | void wakeup_decrementer(void) |