diff options
Diffstat (limited to 'arch/sparc/kernel/leon_smp.c')
-rw-r--r-- | arch/sparc/kernel/leon_smp.c | 12 |
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 | ||
389 | void leon_percpu_timer_interrupt(struct pt_regs *regs) | 389 | irqreturn_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 | ||
412 | static void __init smp_setup_percpu_timer(void) | 408 | static void __init smp_setup_percpu_timer(void) |