root/arch/sparc/kernel/helpers.S

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

/* [<][>][^][v][top][bottom][index][help] */