aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/sun4m_smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/kernel/sun4m_smp.c')
-rw-r--r--arch/sparc/kernel/sun4m_smp.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/sparc/kernel/sun4m_smp.c b/arch/sparc/kernel/sun4m_smp.c
index 7d4a649138f6..e2d9c018bd56 100644
--- a/arch/sparc/kernel/sun4m_smp.c
+++ b/arch/sparc/kernel/sun4m_smp.c
@@ -19,6 +19,7 @@
19#include <linux/profile.h> 19#include <linux/profile.h>
20#include <asm/cacheflush.h> 20#include <asm/cacheflush.h>
21#include <asm/tlbflush.h> 21#include <asm/tlbflush.h>
22#include <asm/irq_regs.h>
22 23
23#include <asm/ptrace.h> 24#include <asm/ptrace.h>
24#include <asm/atomic.h> 25#include <asm/atomic.h>
@@ -353,11 +354,14 @@ void smp4m_cross_call_irq(void)
353 354
354void smp4m_percpu_timer_interrupt(struct pt_regs *regs) 355void smp4m_percpu_timer_interrupt(struct pt_regs *regs)
355{ 356{
357 struct pt_regs *old_regs;
356 int cpu = smp_processor_id(); 358 int cpu = smp_processor_id();
357 359
360 old_regs = set_irq_regs(regs);
361
358 clear_profile_irq(cpu); 362 clear_profile_irq(cpu);
359 363
360 profile_tick(CPU_PROFILING, regs); 364 profile_tick(CPU_PROFILING);
361 365
362 if(!--prof_counter(cpu)) { 366 if(!--prof_counter(cpu)) {
363 int user = user_mode(regs); 367 int user = user_mode(regs);
@@ -368,6 +372,7 @@ void smp4m_percpu_timer_interrupt(struct pt_regs *regs)
368 372
369 prof_counter(cpu) = prof_multiplier(cpu); 373 prof_counter(cpu) = prof_multiplier(cpu);
370 } 374 }
375 set_irq_regs(old_regs);
371} 376}
372 377
373extern unsigned int lvl14_resolution; 378extern unsigned int lvl14_resolution;