diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2006-10-08 08:23:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-08 15:32:35 -0400 |
commit | 6d24c8dc2e656b02807aa0506405727d34c0376c (patch) | |
tree | ab5399601650d9dec7274bcc1ce22a7e490c1c61 /arch/sparc64/kernel/smp.c | |
parent | 0d84438d98777b0f9425d39121c42f47a06878ca (diff) |
[PATCH] sparc64 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/sparc64/kernel/smp.c')
-rw-r--r-- | arch/sparc64/kernel/smp.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index f62bf3a2de1a..cc09d8266414 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <asm/cpudata.h> | 31 | #include <asm/cpudata.h> |
32 | 32 | ||
33 | #include <asm/irq.h> | 33 | #include <asm/irq.h> |
34 | #include <asm/irq_regs.h> | ||
34 | #include <asm/page.h> | 35 | #include <asm/page.h> |
35 | #include <asm/pgtable.h> | 36 | #include <asm/pgtable.h> |
36 | #include <asm/oplib.h> | 37 | #include <asm/oplib.h> |
@@ -1187,6 +1188,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs) | |||
1187 | unsigned long compare, tick, pstate; | 1188 | unsigned long compare, tick, pstate; |
1188 | int cpu = smp_processor_id(); | 1189 | int cpu = smp_processor_id(); |
1189 | int user = user_mode(regs); | 1190 | int user = user_mode(regs); |
1191 | struct pt_regs *old_regs; | ||
1190 | 1192 | ||
1191 | /* | 1193 | /* |
1192 | * Check for level 14 softint. | 1194 | * Check for level 14 softint. |
@@ -1203,8 +1205,9 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs) | |||
1203 | clear_softint(tick_mask); | 1205 | clear_softint(tick_mask); |
1204 | } | 1206 | } |
1205 | 1207 | ||
1208 | old_regs = set_irq_regs(regs); | ||
1206 | do { | 1209 | do { |
1207 | profile_tick(CPU_PROFILING, regs); | 1210 | profile_tick(CPU_PROFILING); |
1208 | if (!--prof_counter(cpu)) { | 1211 | if (!--prof_counter(cpu)) { |
1209 | irq_enter(); | 1212 | irq_enter(); |
1210 | 1213 | ||
@@ -1236,6 +1239,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs) | |||
1236 | : /* no outputs */ | 1239 | : /* no outputs */ |
1237 | : "r" (pstate)); | 1240 | : "r" (pstate)); |
1238 | } while (time_after_eq(tick, compare)); | 1241 | } while (time_after_eq(tick, compare)); |
1242 | set_irq_regs(old_regs); | ||
1239 | } | 1243 | } |
1240 | 1244 | ||
1241 | static void __init smp_setup_percpu_timer(void) | 1245 | static void __init smp_setup_percpu_timer(void) |