]>
Commit | Line | Data |
---|---|---|
6eda3a75 DM |
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 |