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 8*04d4e665SFrederic Weisbecker enum hk_type { 9*04d4e665SFrederic Weisbecker HK_TYPE_TIMER, 10*04d4e665SFrederic Weisbecker HK_TYPE_RCU, 11*04d4e665SFrederic Weisbecker HK_TYPE_MISC, 12*04d4e665SFrederic Weisbecker HK_TYPE_SCHED, 13*04d4e665SFrederic Weisbecker HK_TYPE_TICK, 14*04d4e665SFrederic Weisbecker HK_TYPE_DOMAIN, 15*04d4e665SFrederic Weisbecker HK_TYPE_WQ, 16*04d4e665SFrederic Weisbecker HK_TYPE_MANAGED_IRQ, 17*04d4e665SFrederic Weisbecker HK_TYPE_KTHREAD, 18*04d4e665SFrederic Weisbecker HK_TYPE_MAX 19de201559SFrederic Weisbecker }; 20de201559SFrederic Weisbecker 215c4991e2SFrederic Weisbecker #ifdef CONFIG_CPU_ISOLATION 22dfcb245eSIngo Molnar DECLARE_STATIC_KEY_FALSE(housekeeping_overridden); 23*04d4e665SFrederic Weisbecker extern int housekeeping_any_cpu(enum hk_type type); 24*04d4e665SFrederic Weisbecker extern const struct cpumask *housekeeping_cpumask(enum hk_type type); 25*04d4e665SFrederic Weisbecker extern bool housekeeping_enabled(enum hk_type type); 26*04d4e665SFrederic Weisbecker extern void housekeeping_affine(struct task_struct *t, enum hk_type type); 27*04d4e665SFrederic Weisbecker extern bool housekeeping_test_cpu(int cpu, enum hk_type type); 2878634061SFrederic Weisbecker extern void __init housekeeping_init(void); 297e56a1cfSFrederic Weisbecker 3078634061SFrederic Weisbecker #else 3178634061SFrederic Weisbecker 32*04d4e665SFrederic Weisbecker static inline int housekeeping_any_cpu(enum hk_type type) 339f0ca2d9SFrederic Weisbecker { 349f0ca2d9SFrederic Weisbecker return smp_processor_id(); 359f0ca2d9SFrederic Weisbecker } 3678634061SFrederic Weisbecker 37*04d4e665SFrederic Weisbecker static inline const struct cpumask *housekeeping_cpumask(enum hk_type type) 3878634061SFrederic Weisbecker { 3978634061SFrederic Weisbecker return cpu_possible_mask; 4078634061SFrederic Weisbecker } 4178634061SFrederic Weisbecker 42*04d4e665SFrederic Weisbecker static inline bool housekeeping_enabled(enum hk_type type) 430c5f81daSWanpeng Li { 440c5f81daSWanpeng Li return false; 450c5f81daSWanpeng Li } 460c5f81daSWanpeng Li 47de201559SFrederic Weisbecker static inline void housekeeping_affine(struct task_struct *t, 48*04d4e665SFrederic Weisbecker enum hk_type type) { } 497e56a1cfSFrederic Weisbecker static inline void housekeeping_init(void) { } 505c4991e2SFrederic Weisbecker #endif /* CONFIG_CPU_ISOLATION */ 517e56a1cfSFrederic Weisbecker 52*04d4e665SFrederic Weisbecker static inline bool housekeeping_cpu(int cpu, enum hk_type type) 5378634061SFrederic Weisbecker { 545c4991e2SFrederic Weisbecker #ifdef CONFIG_CPU_ISOLATION 55dfcb245eSIngo Molnar if (static_branch_unlikely(&housekeeping_overridden)) 56*04d4e665SFrederic Weisbecker return housekeeping_test_cpu(cpu, type); 5778634061SFrederic Weisbecker #endif 5878634061SFrederic Weisbecker return true; 5978634061SFrederic Weisbecker } 6078634061SFrederic Weisbecker 6178634061SFrederic Weisbecker #endif /* _LINUX_SCHED_ISOLATION_H */ 62