aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/leon_smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc/kernel/leon_smp.c')
-rw-r--r--arch/sparc/kernel/leon_smp.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/arch/sparc/kernel/leon_smp.c b/arch/sparc/kernel/leon_smp.c
index 8f5de4aa3c0a..053eca9f78e9 100644
--- a/arch/sparc/kernel/leon_smp.c
+++ b/arch/sparc/kernel/leon_smp.c
@@ -386,27 +386,23 @@ void leon_cross_call_irq(void)
386 ccall_info.processors_out[i] = 1; 386 ccall_info.processors_out[i] = 1;
387} 387}
388 388
389void leon_percpu_timer_interrupt(struct pt_regs *regs) 389irqreturn_t leon_percpu_timer_interrupt(int irq, void *unused)
390{ 390{
391 struct pt_regs *old_regs;
392 int cpu = smp_processor_id(); 391 int cpu = smp_processor_id();
393 392
394 old_regs = set_irq_regs(regs);
395
396 leon_clear_profile_irq(cpu); 393 leon_clear_profile_irq(cpu);
397 394
398 profile_tick(CPU_PROFILING); 395 profile_tick(CPU_PROFILING);
399 396
400 if (!--prof_counter(cpu)) { 397 if (!--prof_counter(cpu)) {
401 int user = user_mode(regs); 398 int user = user_mode(get_irq_regs());
402 399
403 irq_enter();
404 update_process_times(user); 400 update_process_times(user);
405 irq_exit();
406 401
407 prof_counter(cpu) = prof_multiplier(cpu); 402 prof_counter(cpu) = prof_multiplier(cpu);
408 } 403 }
409 set_irq_regs(old_regs); 404
405 return IRQ_HANDLED;
410} 406}
411 407
412static void __init smp_setup_percpu_timer(void) 408static void __init smp_setup_percpu_timer(void)