forked from mirrors/linux
		
	We want to centralize the isolation features, to be done by the housekeeping subsystem and scheduler domain isolation is a significant part of it. No intended behaviour change, we just reuse the housekeeping cpumask and core code. Signed-off-by: Frederic Weisbecker <frederic@kernel.org> Acked-by: Thomas Gleixner <tglx@linutronix.de> Cc: Chris Metcalf <cmetcalf@mellanox.com> Cc: Christoph Lameter <cl@linux.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Luiz Capitulino <lcapitulino@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Wanpeng Li <kernellwp@gmail.com> Link: http://lkml.kernel.org/r/1509072159-31808-11-git-send-email-frederic@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _LINUX_SCHED_ISOLATION_H
 | 
						|
#define _LINUX_SCHED_ISOLATION_H
 | 
						|
 | 
						|
#include <linux/cpumask.h>
 | 
						|
#include <linux/init.h>
 | 
						|
#include <linux/tick.h>
 | 
						|
 | 
						|
enum hk_flags {
 | 
						|
	HK_FLAG_TIMER		= 1,
 | 
						|
	HK_FLAG_RCU		= (1 << 1),
 | 
						|
	HK_FLAG_MISC		= (1 << 2),
 | 
						|
	HK_FLAG_SCHED		= (1 << 3),
 | 
						|
	HK_FLAG_TICK		= (1 << 4),
 | 
						|
	HK_FLAG_DOMAIN		= (1 << 5),
 | 
						|
};
 | 
						|
 | 
						|
#ifdef CONFIG_CPU_ISOLATION
 | 
						|
DECLARE_STATIC_KEY_FALSE(housekeeping_overriden);
 | 
						|
extern int housekeeping_any_cpu(enum hk_flags flags);
 | 
						|
extern const struct cpumask *housekeeping_cpumask(enum hk_flags flags);
 | 
						|
extern void housekeeping_affine(struct task_struct *t, enum hk_flags flags);
 | 
						|
extern bool housekeeping_test_cpu(int cpu, enum hk_flags flags);
 | 
						|
extern void __init housekeeping_init(void);
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
static inline int housekeeping_any_cpu(enum hk_flags flags)
 | 
						|
{
 | 
						|
	return smp_processor_id();
 | 
						|
}
 | 
						|
 | 
						|
static inline const struct cpumask *housekeeping_cpumask(enum hk_flags flags)
 | 
						|
{
 | 
						|
	return cpu_possible_mask;
 | 
						|
}
 | 
						|
 | 
						|
static inline void housekeeping_affine(struct task_struct *t,
 | 
						|
				       enum hk_flags flags) { }
 | 
						|
static inline void housekeeping_init(void) { }
 | 
						|
#endif /* CONFIG_CPU_ISOLATION */
 | 
						|
 | 
						|
static inline bool housekeeping_cpu(int cpu, enum hk_flags flags)
 | 
						|
{
 | 
						|
#ifdef CONFIG_CPU_ISOLATION
 | 
						|
	if (static_branch_unlikely(&housekeeping_overriden))
 | 
						|
		return housekeeping_test_cpu(cpu, flags);
 | 
						|
#endif
 | 
						|
	return true;
 | 
						|
}
 | 
						|
 | 
						|
#endif /* _LINUX_SCHED_ISOLATION_H */
 |