diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-06 00:59:03 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:11:49 -0500 |
commit | 314981ac7177a933319e3c071a5cf0a579205e6e (patch) | |
tree | 11895da391ba91195d6d7a67debaa32a28c1215e | |
parent | 936f482af1743141d637483ec10eb881537c26dc (diff) |
[SPARC64]: Kill all %pstate changes in context switch code.
They are totally unnecessary because:
1) Interrupts are already disabled when switch_to()
runs.
2) We don't use hard-coded alternate globals any longer.
This found a case in rtrap, which still assumed alternate
global %g6 was current_thread_info(), and that is fixed
by this changeset as well.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/sparc64/kernel/rtrap.S | 5 | ||||
-rw-r--r-- | include/asm-sparc64/system.h | 5 |
2 files changed, 4 insertions, 6 deletions
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S index e6130956307f..a2fa277da62b 100644 --- a/arch/sparc64/kernel/rtrap.S +++ b/arch/sparc64/kernel/rtrap.S | |||
@@ -224,7 +224,8 @@ rt_continue: ldx [%sp + PTREGS_OFF + PT_V9_G1], %g1 | |||
224 | ldx [%sp + PTREGS_OFF + PT_V9_G4], %g4 | 224 | ldx [%sp + PTREGS_OFF + PT_V9_G4], %g4 |
225 | ldx [%sp + PTREGS_OFF + PT_V9_G5], %g5 | 225 | ldx [%sp + PTREGS_OFF + PT_V9_G5], %g5 |
226 | brz,pt %l3, 1f | 226 | brz,pt %l3, 1f |
227 | nop | 227 | mov %g6, %l2 |
228 | |||
228 | /* Must do this before thread reg is clobbered below. */ | 229 | /* Must do this before thread reg is clobbered below. */ |
229 | LOAD_PER_CPU_BASE(%g5, %g6, %i0, %i1, %i2) | 230 | LOAD_PER_CPU_BASE(%g5, %g6, %i0, %i1, %i2) |
230 | 1: | 231 | 1: |
@@ -238,6 +239,8 @@ rt_continue: ldx [%sp + PTREGS_OFF + PT_V9_G1], %g1 | |||
238 | SET_GL(1) | 239 | SET_GL(1) |
239 | .previous | 240 | .previous |
240 | 241 | ||
242 | mov %l2, %g6 | ||
243 | |||
241 | ldx [%sp + PTREGS_OFF + PT_V9_I0], %i0 | 244 | ldx [%sp + PTREGS_OFF + PT_V9_I0], %i0 |
242 | ldx [%sp + PTREGS_OFF + PT_V9_I1], %i1 | 245 | ldx [%sp + PTREGS_OFF + PT_V9_I1], %i1 |
243 | 246 | ||
diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h index 26c0807af3e4..a18ec87a52c1 100644 --- a/include/asm-sparc64/system.h +++ b/include/asm-sparc64/system.h | |||
@@ -213,7 +213,6 @@ do { if (test_thread_flag(TIF_PERFCTR)) { \ | |||
213 | task_thread_info(next); \ | 213 | task_thread_info(next); \ |
214 | __asm__ __volatile__( \ | 214 | __asm__ __volatile__( \ |
215 | "mov %%g4, %%g7\n\t" \ | 215 | "mov %%g4, %%g7\n\t" \ |
216 | "wrpr %%g0, 0x95, %%pstate\n\t" \ | ||
217 | "stx %%i6, [%%sp + 2047 + 0x70]\n\t" \ | 216 | "stx %%i6, [%%sp + 2047 + 0x70]\n\t" \ |
218 | "stx %%i7, [%%sp + 2047 + 0x78]\n\t" \ | 217 | "stx %%i7, [%%sp + 2047 + 0x78]\n\t" \ |
219 | "rdpr %%wstate, %%o5\n\t" \ | 218 | "rdpr %%wstate, %%o5\n\t" \ |
@@ -227,14 +226,10 @@ do { if (test_thread_flag(TIF_PERFCTR)) { \ | |||
227 | "ldx [%%g6 + %3], %%o6\n\t" \ | 226 | "ldx [%%g6 + %3], %%o6\n\t" \ |
228 | "ldub [%%g6 + %2], %%o5\n\t" \ | 227 | "ldub [%%g6 + %2], %%o5\n\t" \ |
229 | "ldub [%%g6 + %4], %%o7\n\t" \ | 228 | "ldub [%%g6 + %4], %%o7\n\t" \ |
230 | "mov %%g6, %%l2\n\t" \ | ||
231 | "wrpr %%o5, 0x0, %%wstate\n\t" \ | 229 | "wrpr %%o5, 0x0, %%wstate\n\t" \ |
232 | "ldx [%%sp + 2047 + 0x70], %%i6\n\t" \ | 230 | "ldx [%%sp + 2047 + 0x70], %%i6\n\t" \ |
233 | "ldx [%%sp + 2047 + 0x78], %%i7\n\t" \ | 231 | "ldx [%%sp + 2047 + 0x78], %%i7\n\t" \ |
234 | "wrpr %%g0, 0x94, %%pstate\n\t" \ | ||
235 | "mov %%l2, %%g6\n\t" \ | ||
236 | "ldx [%%g6 + %6], %%g4\n\t" \ | 232 | "ldx [%%g6 + %6], %%g4\n\t" \ |
237 | "wrpr %%g0, 0x96, %%pstate\n\t" \ | ||
238 | "brz,pt %%o7, 1f\n\t" \ | 233 | "brz,pt %%o7, 1f\n\t" \ |
239 | " mov %%g7, %0\n\t" \ | 234 | " mov %%g7, %0\n\t" \ |
240 | "b,a ret_from_syscall\n\t" \ | 235 | "b,a ret_from_syscall\n\t" \ |