mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	 b11287e8c5
			
		
	
	
		b11287e8c5
		
	
	
	
	
		
			
			After b0f82b81fe ("perf: Drop the skip
argument from perf_arch_fetch_regs_caller") the build broke on sparc64
due to the lack of a module symbol export of __perf_arch_fetch_caller_regs.
But that assembler helper can actually be complete eliminated now that
the semantics of this interface have been greatly simplified.
Signed-off-by: David S. Miller <davem@davemloft.net>
		
	
			
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 	.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
 |