diff options
Diffstat (limited to 'arch/sparc/kernel/sun4d_smp.c')
-rw-r--r-- | arch/sparc/kernel/sun4d_smp.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/sparc/kernel/sun4d_smp.c b/arch/sparc/kernel/sun4d_smp.c index 3ff4edd32815..c80ea61e8ba0 100644 --- a/arch/sparc/kernel/sun4d_smp.c +++ b/arch/sparc/kernel/sun4d_smp.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include <asm/ptrace.h> | 24 | #include <asm/ptrace.h> |
25 | #include <asm/atomic.h> | 25 | #include <asm/atomic.h> |
26 | #include <asm/irq_regs.h> | ||
26 | 27 | ||
27 | #include <asm/delay.h> | 28 | #include <asm/delay.h> |
28 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
@@ -369,10 +370,12 @@ void smp4d_message_pass(int target, int msg, unsigned long data, int wait) | |||
369 | 370 | ||
370 | void smp4d_percpu_timer_interrupt(struct pt_regs *regs) | 371 | void smp4d_percpu_timer_interrupt(struct pt_regs *regs) |
371 | { | 372 | { |
373 | struct pt_regs *old_regs; | ||
372 | int cpu = hard_smp4d_processor_id(); | 374 | int cpu = hard_smp4d_processor_id(); |
373 | static int cpu_tick[NR_CPUS]; | 375 | static int cpu_tick[NR_CPUS]; |
374 | static char led_mask[] = { 0xe, 0xd, 0xb, 0x7, 0xb, 0xd }; | 376 | static char led_mask[] = { 0xe, 0xd, 0xb, 0x7, 0xb, 0xd }; |
375 | 377 | ||
378 | old_regs = set_irq_regs(regs); | ||
376 | bw_get_prof_limit(cpu); | 379 | bw_get_prof_limit(cpu); |
377 | bw_clear_intr_mask(0, 1); /* INTR_TABLE[0] & 1 is Profile IRQ */ | 380 | bw_clear_intr_mask(0, 1); /* INTR_TABLE[0] & 1 is Profile IRQ */ |
378 | 381 | ||
@@ -384,7 +387,7 @@ void smp4d_percpu_timer_interrupt(struct pt_regs *regs) | |||
384 | show_leds(cpu); | 387 | show_leds(cpu); |
385 | } | 388 | } |
386 | 389 | ||
387 | profile_tick(CPU_PROFILING, regs); | 390 | profile_tick(CPU_PROFILING); |
388 | 391 | ||
389 | if(!--prof_counter(cpu)) { | 392 | if(!--prof_counter(cpu)) { |
390 | int user = user_mode(regs); | 393 | int user = user_mode(regs); |
@@ -395,6 +398,7 @@ void smp4d_percpu_timer_interrupt(struct pt_regs *regs) | |||
395 | 398 | ||
396 | prof_counter(cpu) = prof_multiplier(cpu); | 399 | prof_counter(cpu) = prof_multiplier(cpu); |
397 | } | 400 | } |
401 | set_irq_regs(old_regs); | ||
398 | } | 402 | } |
399 | 403 | ||
400 | extern unsigned int lvl14_resolution; | 404 | extern unsigned int lvl14_resolution; |