diff options
author | David S. Miller <davem@davemloft.net> | 2008-04-28 03:47:20 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-04-28 03:47:20 -0400 |
commit | 6eda3a75928a3dc1072dfffd228ab818869d83ad (patch) | |
tree | 56e44907f23134273fe383424c69df4d62c6544c /arch/sparc64/kernel/helpers.S | |
parent | 194f1a68b93e959ede6ec363db4714e630bdbb6a (diff) |
sparc64: Split entry.S up into seperate files.
entry.S was a hodge-podge of several totally unrelated
sets of assembler routines, ranging from FPU trap handlers
to hypervisor call functions.
Split it up into topic-sized pieces.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/helpers.S')
-rw-r--r-- | arch/sparc64/kernel/helpers.S | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/arch/sparc64/kernel/helpers.S b/arch/sparc64/kernel/helpers.S new file mode 100644 index 000000000000..314dd0c9fc5b --- /dev/null +++ b/arch/sparc64/kernel/helpers.S | |||
@@ -0,0 +1,63 @@ | |||
1 | .align 32 | ||
2 | .globl __flushw_user | ||
3 | .type __flushw_user,#function | ||
4 | __flushw_user: | ||
5 | rdpr %otherwin, %g1 | ||
6 | brz,pn %g1, 2f | ||
7 | clr %g2 | ||
8 | 1: save %sp, -128, %sp | ||
9 | rdpr %otherwin, %g1 | ||
10 | brnz,pt %g1, 1b | ||
11 | add %g2, 1, %g2 | ||
12 | 1: sub %g2, 1, %g2 | ||
13 | brnz,pt %g2, 1b | ||
14 | restore %g0, %g0, %g0 | ||
15 | 2: retl | ||
16 | nop | ||
17 | .size __flushw_user,.-__flushw_user | ||
18 | |||
19 | /* Flush %fp and %i7 to the stack for all register | ||
20 | * windows active inside of the cpu. This allows | ||
21 | * show_stack_trace() to avoid using an expensive | ||
22 | * 'flushw'. | ||
23 | */ | ||
24 | .globl stack_trace_flush | ||
25 | .type stack_trace_flush,#function | ||
26 | stack_trace_flush: | ||
27 | rdpr %pstate, %o0 | ||
28 | wrpr %o0, PSTATE_IE, %pstate | ||
29 | |||
30 | rdpr %cwp, %g1 | ||
31 | rdpr %canrestore, %g2 | ||
32 | sub %g1, 1, %g3 | ||
33 | |||
34 | 1: brz,pn %g2, 2f | ||
35 | sub %g2, 1, %g2 | ||
36 | wrpr %g3, %cwp | ||
37 | stx %fp, [%sp + STACK_BIAS + RW_V9_I6] | ||
38 | stx %i7, [%sp + STACK_BIAS + RW_V9_I7] | ||
39 | ba,pt %xcc, 1b | ||
40 | sub %g3, 1, %g3 | ||
41 | |||
42 | 2: wrpr %g1, %cwp | ||
43 | wrpr %o0, %pstate | ||
44 | |||
45 | retl | ||
46 | nop | ||
47 | .size stack_trace_flush,.-stack_trace_flush | ||
48 | |||
49 | #ifdef CONFIG_SMP | ||
50 | .globl hard_smp_processor_id | ||
51 | .type hard_smp_processor_id,#function | ||
52 | hard_smp_processor_id: | ||
53 | #endif | ||
54 | .globl real_hard_smp_processor_id | ||
55 | .type real_hard_smp_processor_id,#function | ||
56 | real_hard_smp_processor_id: | ||
57 | __GET_CPUID(%o0) | ||
58 | retl | ||
59 | nop | ||
60 | #ifdef CONFIG_SMP | ||
61 | .size hard_smp_processor_id,.-hard_smp_processor_id | ||
62 | #endif | ||
63 | .size real_hard_smp_processor_id,.-real_hard_smp_processor_id | ||