178634061SFrederic Weisbecker #ifndef _LINUX_SCHED_ISOLATION_H 278634061SFrederic Weisbecker #define _LINUX_SCHED_ISOLATION_H 378634061SFrederic Weisbecker 478634061SFrederic Weisbecker #include <linux/cpumask.h> 5*3232e7aaSWaiman Long #include <linux/cpuset.h> 678634061SFrederic Weisbecker #include <linux/init.h> 778634061SFrederic Weisbecker #include <linux/tick.h> 878634061SFrederic Weisbecker 904d4e665SFrederic Weisbecker enum hk_type { 1004d4e665SFrederic Weisbecker HK_TYPE_TIMER, 1104d4e665SFrederic Weisbecker HK_TYPE_RCU, 1204d4e665SFrederic Weisbecker HK_TYPE_MISC, 1304d4e665SFrederic Weisbecker HK_TYPE_SCHED, 1404d4e665SFrederic Weisbecker HK_TYPE_TICK, 1504d4e665SFrederic Weisbecker HK_TYPE_DOMAIN, 1604d4e665SFrederic Weisbecker HK_TYPE_WQ, 1704d4e665SFrederic Weisbecker HK_TYPE_MANAGED_IRQ, 1804d4e665SFrederic Weisbecker HK_TYPE_KTHREAD, 1904d4e665SFrederic Weisbecker HK_TYPE_MAX 20de201559SFrederic Weisbecker }; 21de201559SFrederic Weisbecker 225c4991e2SFrederic Weisbecker #ifdef CONFIG_CPU_ISOLATION 23dfcb245eSIngo Molnar DECLARE_STATIC_KEY_FALSE(housekeeping_overridden); 2404d4e665SFrederic Weisbecker extern int housekeeping_any_cpu(enum hk_type type); 2504d4e665SFrederic Weisbecker extern const struct cpumask *housekeeping_cpumask(enum hk_type type); 2604d4e665SFrederic Weisbecker extern bool housekeeping_enabled(enum hk_type type); 2704d4e665SFrederic Weisbecker extern void housekeeping_affine(struct task_struct *t, enum hk_type type); 2804d4e665SFrederic Weisbecker extern bool housekeeping_test_cpu(int cpu, enum hk_type type); 2978634061SFrederic Weisbecker extern void __init housekeeping_init(void); 307e56a1cfSFrederic Weisbecker 3178634061SFrederic Weisbecker #else 3278634061SFrederic Weisbecker 3304d4e665SFrederic Weisbecker static inline int housekeeping_any_cpu(enum hk_type type) 349f0ca2d9SFrederic Weisbecker { 359f0ca2d9SFrederic Weisbecker return smp_processor_id(); 369f0ca2d9SFrederic Weisbecker } 3778634061SFrederic Weisbecker 3804d4e665SFrederic Weisbecker static inline const struct cpumask *housekeeping_cpumask(enum hk_type type) 3978634061SFrederic Weisbecker { 4078634061SFrederic Weisbecker return cpu_possible_mask; 4178634061SFrederic Weisbecker } 4278634061SFrederic Weisbecker 4304d4e665SFrederic Weisbecker static inline bool housekeeping_enabled(enum hk_type type) 440c5f81daSWanpeng Li { 450c5f81daSWanpeng Li return false; 460c5f81daSWanpeng Li } 470c5f81daSWanpeng Li 48de201559SFrederic Weisbecker static inline void housekeeping_affine(struct task_struct *t, 4904d4e665SFrederic Weisbecker enum hk_type type) { } 50a85c2257SFrederic Weisbecker 51a85c2257SFrederic Weisbecker static inline bool housekeeping_test_cpu(int cpu, enum hk_type type) 52a85c2257SFrederic Weisbecker { 53a85c2257SFrederic Weisbecker return true; 54a85c2257SFrederic Weisbecker } 55a85c2257SFrederic Weisbecker 567e56a1cfSFrederic Weisbecker static inline void housekeeping_init(void) { } 575c4991e2SFrederic Weisbecker #endif /* CONFIG_CPU_ISOLATION */ 587e56a1cfSFrederic Weisbecker 5904d4e665SFrederic Weisbecker static inline bool housekeeping_cpu(int cpu, enum hk_type type) 6078634061SFrederic Weisbecker { 615c4991e2SFrederic Weisbecker #ifdef CONFIG_CPU_ISOLATION 62dfcb245eSIngo Molnar if (static_branch_unlikely(&housekeeping_overridden)) 6304d4e665SFrederic Weisbecker return housekeeping_test_cpu(cpu, type); 6478634061SFrederic Weisbecker #endif 6578634061SFrederic Weisbecker return true; 6678634061SFrederic Weisbecker } 6778634061SFrederic Weisbecker 68a85c2257SFrederic Weisbecker static inline bool cpu_is_isolated(int cpu) 69a85c2257SFrederic Weisbecker { 70a85c2257SFrederic Weisbecker return !housekeeping_test_cpu(cpu, HK_TYPE_DOMAIN) || 71*3232e7aaSWaiman Long !housekeeping_test_cpu(cpu, HK_TYPE_TICK) || 72*3232e7aaSWaiman Long cpuset_cpu_is_isolated(cpu); 73a85c2257SFrederic Weisbecker } 74a85c2257SFrederic Weisbecker 7578634061SFrederic Weisbecker #endif /* _LINUX_SCHED_ISOLATION_H */ 76