178634061SFrederic Weisbecker #ifndef _LINUX_SCHED_ISOLATION_H 278634061SFrederic Weisbecker #define _LINUX_SCHED_ISOLATION_H 378634061SFrederic Weisbecker 478634061SFrederic Weisbecker #include <linux/cpumask.h> 578634061SFrederic Weisbecker #include <linux/init.h> 678634061SFrederic Weisbecker #include <linux/tick.h> 778634061SFrederic Weisbecker 8de201559SFrederic Weisbecker enum hk_flags { 9de201559SFrederic Weisbecker HK_FLAG_TIMER = 1, 10de201559SFrederic Weisbecker HK_FLAG_RCU = (1 << 1), 11de201559SFrederic Weisbecker HK_FLAG_MISC = (1 << 2), 12de201559SFrederic Weisbecker HK_FLAG_SCHED = (1 << 3), 136f1982feSFrederic Weisbecker HK_FLAG_TICK = (1 << 4), 14edb93821SFrederic Weisbecker HK_FLAG_DOMAIN = (1 << 5), 151bda3f80SFrederic Weisbecker HK_FLAG_WQ = (1 << 6), 16de201559SFrederic Weisbecker }; 17de201559SFrederic Weisbecker 185c4991e2SFrederic Weisbecker #ifdef CONFIG_CPU_ISOLATION 19dfcb245eSIngo Molnar DECLARE_STATIC_KEY_FALSE(housekeeping_overridden); 20de201559SFrederic Weisbecker extern int housekeeping_any_cpu(enum hk_flags flags); 21de201559SFrederic Weisbecker extern const struct cpumask *housekeeping_cpumask(enum hk_flags flags); 22*0c5f81daSWanpeng Li extern bool housekeeping_enabled(enum hk_flags flags); 23de201559SFrederic Weisbecker extern void housekeeping_affine(struct task_struct *t, enum hk_flags flags); 24de201559SFrederic Weisbecker extern bool housekeeping_test_cpu(int cpu, enum hk_flags flags); 2578634061SFrederic Weisbecker extern void __init housekeeping_init(void); 267e56a1cfSFrederic Weisbecker 2778634061SFrederic Weisbecker #else 2878634061SFrederic Weisbecker 29de201559SFrederic Weisbecker static inline int housekeeping_any_cpu(enum hk_flags flags) 309f0ca2d9SFrederic Weisbecker { 319f0ca2d9SFrederic Weisbecker return smp_processor_id(); 329f0ca2d9SFrederic Weisbecker } 3378634061SFrederic Weisbecker 34de201559SFrederic Weisbecker static inline const struct cpumask *housekeeping_cpumask(enum hk_flags flags) 3578634061SFrederic Weisbecker { 3678634061SFrederic Weisbecker return cpu_possible_mask; 3778634061SFrederic Weisbecker } 3878634061SFrederic Weisbecker 39*0c5f81daSWanpeng Li static inline bool housekeeping_enabled(enum hk_flags flags) 40*0c5f81daSWanpeng Li { 41*0c5f81daSWanpeng Li return false; 42*0c5f81daSWanpeng Li } 43*0c5f81daSWanpeng Li 44de201559SFrederic Weisbecker static inline void housekeeping_affine(struct task_struct *t, 45de201559SFrederic Weisbecker enum hk_flags flags) { } 467e56a1cfSFrederic Weisbecker static inline void housekeeping_init(void) { } 475c4991e2SFrederic Weisbecker #endif /* CONFIG_CPU_ISOLATION */ 487e56a1cfSFrederic Weisbecker 49de201559SFrederic Weisbecker static inline bool housekeeping_cpu(int cpu, enum hk_flags flags) 5078634061SFrederic Weisbecker { 515c4991e2SFrederic Weisbecker #ifdef CONFIG_CPU_ISOLATION 52dfcb245eSIngo Molnar if (static_branch_unlikely(&housekeeping_overridden)) 53de201559SFrederic Weisbecker return housekeeping_test_cpu(cpu, flags); 5478634061SFrederic Weisbecker #endif 5578634061SFrederic Weisbecker return true; 5678634061SFrederic Weisbecker } 5778634061SFrederic Weisbecker 5878634061SFrederic Weisbecker #endif /* _LINUX_SCHED_ISOLATION_H */ 59