xref: /linux-6.15/include/linux/sched/isolation.h (revision 3232e7aa)
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