mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	STIBP stands for Single Thread Indirect Branch Predictors. The acronym, however, can be easily mis-spelled as STIPB. It is perhaps due to the presence of another related term - IBPB (Indirect Branch Predictor Barrier). Fix the mis-spelling in the code. Signed-off-by: Waiman Long <longman@redhat.com> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David Woodhouse <dwmw@amazon.co.uk> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Kosina <jkosina@suse.cz> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: KarimAllah Ahmed <karahmed@amazon.de> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tim Chen <tim.c.chen@linux.intel.com> Cc: x86-ml <x86@kernel.org> Link: https://lkml.kernel.org/r/1544039368-9009-1-git-send-email-longman@redhat.com
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0
 | 
						|
//
 | 
						|
// Code shared between 32 and 64 bit
 | 
						|
 | 
						|
#include <asm/spec-ctrl.h>
 | 
						|
 | 
						|
void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p);
 | 
						|
 | 
						|
/*
 | 
						|
 * This needs to be inline to optimize for the common case where no extra
 | 
						|
 * work needs to be done.
 | 
						|
 */
 | 
						|
static inline void switch_to_extra(struct task_struct *prev,
 | 
						|
				   struct task_struct *next)
 | 
						|
{
 | 
						|
	unsigned long next_tif = task_thread_info(next)->flags;
 | 
						|
	unsigned long prev_tif = task_thread_info(prev)->flags;
 | 
						|
 | 
						|
	if (IS_ENABLED(CONFIG_SMP)) {
 | 
						|
		/*
 | 
						|
		 * Avoid __switch_to_xtra() invocation when conditional
 | 
						|
		 * STIBP is disabled and the only different bit is
 | 
						|
		 * TIF_SPEC_IB. For CONFIG_SMP=n TIF_SPEC_IB is not
 | 
						|
		 * in the TIF_WORK_CTXSW masks.
 | 
						|
		 */
 | 
						|
		if (!static_branch_likely(&switch_to_cond_stibp)) {
 | 
						|
			prev_tif &= ~_TIF_SPEC_IB;
 | 
						|
			next_tif &= ~_TIF_SPEC_IB;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/*
 | 
						|
	 * __switch_to_xtra() handles debug registers, i/o bitmaps,
 | 
						|
	 * speculation mitigations etc.
 | 
						|
	 */
 | 
						|
	if (unlikely(next_tif & _TIF_WORK_CTXSW_NEXT ||
 | 
						|
		     prev_tif & _TIF_WORK_CTXSW_PREV))
 | 
						|
		__switch_to_xtra(prev, next);
 | 
						|
}
 |