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