aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/sun4d_smp.c
diff options
context:
space:
mode:
authorAl Viro <viro@ftp.linux.org.uk>2006-10-08 09:30:44 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-08 15:32:35 -0400
commit0d84438d98777b0f9425d39121c42f47a06878ca (patch)
tree9d3486664ecf836183f982f7011c5b8b37c4091e /arch/sparc/kernel/sun4d_smp.c
parent7ff3e52cf2947ebd38c84159af68e5a29d228f6c (diff)
[PATCH] sparc32 pt_regs fixes
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/sparc/kernel/sun4d_smp.c')
-rw-r--r--arch/sparc/kernel/sun4d_smp.c6
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
370void smp4d_percpu_timer_interrupt(struct pt_regs *regs) 371void 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
400extern unsigned int lvl14_resolution; 404extern unsigned int lvl14_resolution;