Blame view

arch/sparc/kernel/helpers.S 1.33 KB
6eda3a759   David S. Miller   sparc64: Split en...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  	.align	32
  	.globl	__flushw_user
  	.type	__flushw_user,#function
  __flushw_user:
  	rdpr	%otherwin, %g1
  	brz,pn	%g1, 2f
  	 clr	%g2
  1:	save	%sp, -128, %sp
  	rdpr	%otherwin, %g1
  	brnz,pt	%g1, 1b
  	 add	%g2, 1, %g2
  1:	sub	%g2, 1, %g2
  	brnz,pt	%g2, 1b
  	 restore %g0, %g0, %g0
  2:	retl
  	 nop
  	.size	__flushw_user,.-__flushw_user
  
  	/* Flush %fp and %i7 to the stack for all register
  	 * windows active inside of the cpu.  This allows
  	 * show_stack_trace() to avoid using an expensive
  	 * 'flushw'.
  	 */
  	.globl		stack_trace_flush
  	.type		stack_trace_flush,#function
  stack_trace_flush:
  	rdpr		%pstate, %o0
  	wrpr		%o0, PSTATE_IE, %pstate
  
  	rdpr		%cwp, %g1
  	rdpr		%canrestore, %g2
  	sub		%g1, 1, %g3
  
  1:	brz,pn		%g2, 2f
  	 sub		%g2, 1, %g2
  	wrpr		%g3, %cwp
  	stx		%fp, [%sp + STACK_BIAS + RW_V9_I6]
  	stx		%i7, [%sp + STACK_BIAS + RW_V9_I7]
  	ba,pt		%xcc, 1b
  	 sub		%g3, 1, %g3
  
  2:	wrpr		%g1, %cwp
  	wrpr		%o0, %pstate
  
  	retl
  	 nop
  	.size		stack_trace_flush,.-stack_trace_flush
  
  #ifdef CONFIG_SMP
  	.globl		hard_smp_processor_id
  	.type		hard_smp_processor_id,#function
  hard_smp_processor_id:
  #endif
  	.globl		real_hard_smp_processor_id
  	.type		real_hard_smp_processor_id,#function
  real_hard_smp_processor_id:
  	__GET_CPUID(%o0)
  	retl
  	 nop
  #ifdef CONFIG_SMP
  	.size		hard_smp_processor_id,.-hard_smp_processor_id
  #endif
  	.size		real_hard_smp_processor_id,.-real_hard_smp_processor_id