Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : // 3 : : // Code shared between 32 and 64 bit 4 : : 5 : : #include <asm/spec-ctrl.h> 6 : : 7 : : void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p); 8 : : 9 : : /* 10 : : * This needs to be inline to optimize for the common case where no extra 11 : : * work needs to be done. 12 : : */ 13 : 790756 : static inline void switch_to_extra(struct task_struct *prev, 14 : : struct task_struct *next) 15 : : { 16 [ - + ]: 790756 : unsigned long next_tif = task_thread_info(next)->flags; 17 : 790756 : unsigned long prev_tif = task_thread_info(prev)->flags; 18 : : 19 : 790756 : if (IS_ENABLED(CONFIG_SMP)) { 20 : : /* 21 : : * Avoid __switch_to_xtra() invocation when conditional 22 : : * STIBP is disabled and the only different bit is 23 : : * TIF_SPEC_IB. For CONFIG_SMP=n TIF_SPEC_IB is not 24 : : * in the TIF_WORK_CTXSW masks. 25 : : */ 26 [ - + + - ]: 790756 : if (!static_branch_likely(&switch_to_cond_stibp)) { 27 : 790756 : prev_tif &= ~_TIF_SPEC_IB; 28 : 790756 : next_tif &= ~_TIF_SPEC_IB; 29 : : } 30 : : } 31 : : 32 : : /* 33 : : * __switch_to_xtra() handles debug registers, i/o bitmaps, 34 : : * speculation mitigations etc. 35 : : */ 36 [ + - - + ]: 790756 : if (unlikely(next_tif & _TIF_WORK_CTXSW_NEXT || 37 : : prev_tif & _TIF_WORK_CTXSW_PREV)) 38 : 0 : __switch_to_xtra(prev, next); 39 : 790756 : }