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