1 #ifndef _LINUX_SCHED_ISOLATION_H 2 #define _LINUX_SCHED_ISOLATION_H 3 4 #include <linux/cpumask.h> 5 #include <linux/cpuset.h> 6 #include <linux/init.h> 7 #include <linux/tick.h> 8 9 enum hk_type { 10 HK_TYPE_TIMER, 11 HK_TYPE_RCU, 12 HK_TYPE_MISC, 13 HK_TYPE_SCHED, 14 HK_TYPE_TICK, 15 HK_TYPE_DOMAIN, 16 HK_TYPE_WQ, 17 HK_TYPE_MANAGED_IRQ, 18 HK_TYPE_KTHREAD, 19 HK_TYPE_MAX 20 }; 21 22 #ifdef CONFIG_CPU_ISOLATION 23 DECLARE_STATIC_KEY_FALSE(housekeeping_overridden); 24 extern int housekeeping_any_cpu(enum hk_type type); 25 extern const struct cpumask *housekeeping_cpumask(enum hk_type type); 26 extern bool housekeeping_enabled(enum hk_type type); 27 extern void housekeeping_affine(struct task_struct *t, enum hk_type type); 28 extern bool housekeeping_test_cpu(int cpu, enum hk_type type); 29 extern void __init housekeeping_init(void); 30 31 #else 32 housekeeping_any_cpu(enum hk_type type)33 static inline int housekeeping_any_cpu(enum hk_type type) 34 { 35 return smp_processor_id(); 36 } 37 housekeeping_cpumask(enum hk_type type)38 static inline const struct cpumask *housekeeping_cpumask(enum hk_type type) 39 { 40 return cpu_possible_mask; 41 } 42 housekeeping_enabled(enum hk_type type)43 static inline bool housekeeping_enabled(enum hk_type type) 44 { 45 return false; 46 } 47 housekeeping_affine(struct task_struct * t,enum hk_type type)48 static inline void housekeeping_affine(struct task_struct *t, 49 enum hk_type type) { } 50 housekeeping_test_cpu(int cpu,enum hk_type type)51 static inline bool housekeeping_test_cpu(int cpu, enum hk_type type) 52 { 53 return true; 54 } 55 housekeeping_init(void)56 static inline void housekeeping_init(void) { } 57 #endif /* CONFIG_CPU_ISOLATION */ 58 housekeeping_cpu(int cpu,enum hk_type type)59 static inline bool housekeeping_cpu(int cpu, enum hk_type type) 60 { 61 #ifdef CONFIG_CPU_ISOLATION 62 if (static_branch_unlikely(&housekeeping_overridden)) 63 return housekeeping_test_cpu(cpu, type); 64 #endif 65 return true; 66 } 67 cpu_is_isolated(int cpu)68 static inline bool cpu_is_isolated(int cpu) 69 { 70 return !housekeeping_test_cpu(cpu, HK_TYPE_DOMAIN) || 71 !housekeeping_test_cpu(cpu, HK_TYPE_TICK) || 72 cpuset_cpu_is_isolated(cpu); 73 } 74 75 #endif /* _LINUX_SCHED_ISOLATION_H */ 76