xref: /linux-6.15/include/linux/sched/isolation.h (revision 78634061)
1*78634061SFrederic Weisbecker #ifndef _LINUX_SCHED_ISOLATION_H
2*78634061SFrederic Weisbecker #define _LINUX_SCHED_ISOLATION_H
3*78634061SFrederic Weisbecker 
4*78634061SFrederic Weisbecker #include <linux/cpumask.h>
5*78634061SFrederic Weisbecker #include <linux/init.h>
6*78634061SFrederic Weisbecker #include <linux/tick.h>
7*78634061SFrederic Weisbecker 
8*78634061SFrederic Weisbecker #ifdef CONFIG_NO_HZ_FULL
9*78634061SFrederic Weisbecker extern cpumask_var_t housekeeping_mask;
10*78634061SFrederic Weisbecker 
11*78634061SFrederic Weisbecker static inline int housekeeping_any_cpu(void)
12*78634061SFrederic Weisbecker {
13*78634061SFrederic Weisbecker 	return cpumask_any_and(housekeeping_mask, cpu_online_mask);
14*78634061SFrederic Weisbecker }
15*78634061SFrederic Weisbecker 
16*78634061SFrederic Weisbecker extern void __init housekeeping_init(void);
17*78634061SFrederic Weisbecker 
18*78634061SFrederic Weisbecker #else
19*78634061SFrederic Weisbecker 
20*78634061SFrederic Weisbecker static inline int housekeeping_any_cpu(void)
21*78634061SFrederic Weisbecker {
22*78634061SFrederic Weisbecker 	return smp_processor_id();
23*78634061SFrederic Weisbecker }
24*78634061SFrederic Weisbecker 
25*78634061SFrederic Weisbecker static inline void housekeeping_init(void) { }
26*78634061SFrederic Weisbecker #endif /* CONFIG_NO_HZ_FULL */
27*78634061SFrederic Weisbecker 
28*78634061SFrederic Weisbecker 
29*78634061SFrederic Weisbecker static inline const struct cpumask *housekeeping_cpumask(void)
30*78634061SFrederic Weisbecker {
31*78634061SFrederic Weisbecker #ifdef CONFIG_NO_HZ_FULL
32*78634061SFrederic Weisbecker 	if (tick_nohz_full_enabled())
33*78634061SFrederic Weisbecker 		return housekeeping_mask;
34*78634061SFrederic Weisbecker #endif
35*78634061SFrederic Weisbecker 	return cpu_possible_mask;
36*78634061SFrederic Weisbecker }
37*78634061SFrederic Weisbecker 
38*78634061SFrederic Weisbecker static inline bool is_housekeeping_cpu(int cpu)
39*78634061SFrederic Weisbecker {
40*78634061SFrederic Weisbecker #ifdef CONFIG_NO_HZ_FULL
41*78634061SFrederic Weisbecker 	if (tick_nohz_full_enabled())
42*78634061SFrederic Weisbecker 		return cpumask_test_cpu(cpu, housekeeping_mask);
43*78634061SFrederic Weisbecker #endif
44*78634061SFrederic Weisbecker 	return true;
45*78634061SFrederic Weisbecker }
46*78634061SFrederic Weisbecker 
47*78634061SFrederic Weisbecker static inline void housekeeping_affine(struct task_struct *t)
48*78634061SFrederic Weisbecker {
49*78634061SFrederic Weisbecker #ifdef CONFIG_NO_HZ_FULL
50*78634061SFrederic Weisbecker 	if (tick_nohz_full_enabled())
51*78634061SFrederic Weisbecker 		set_cpus_allowed_ptr(t, housekeeping_mask);
52*78634061SFrederic Weisbecker 
53*78634061SFrederic Weisbecker #endif
54*78634061SFrederic Weisbecker }
55*78634061SFrederic Weisbecker 
56*78634061SFrederic Weisbecker #endif /* _LINUX_SCHED_ISOLATION_H */
57