linux/arch/sparc/kernel/helpers.S
<<
>>
Prefs
   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
   91:      save    %sp, -128, %sp
  10        rdpr    %otherwin, %g1
  11        brnz,pt %g1, 1b
  12         add    %g2, 1, %g2
  131:      sub     %g2, 1, %g2
  14        brnz,pt %g2, 1b
  15         restore %g0, %g0, %g0
  162:      retl
  17         nop
  18        .size   __flushw_user,.-__flushw_user
  19EXPORT_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
  28stack_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
  361:      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
  442:      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
  54hard_smp_processor_id:
  55#endif
  56        .globl          real_hard_smp_processor_id
  57        .type           real_hard_smp_processor_id,#function
  58real_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
  66EXPORT_SYMBOL_GPL(real_hard_smp_processor_id)
  67