blob: 040df04fa78af245a2a043c6efd6ef9aabec7fc8 [file] [log] [blame]
Frederic Weisbecker78634062017-10-27 04:42:28 +02001#ifndef _LINUX_SCHED_ISOLATION_H
2#define _LINUX_SCHED_ISOLATION_H
3
4#include <linux/cpumask.h>
5#include <linux/init.h>
6#include <linux/tick.h>
7
8#ifdef CONFIG_NO_HZ_FULL
9extern cpumask_var_t housekeeping_mask;
Frederic Weisbecker78634062017-10-27 04:42:28 +020010extern void __init housekeeping_init(void);
Frederic Weisbecker78634062017-10-27 04:42:28 +020011#else
Frederic Weisbecker78634062017-10-27 04:42:28 +020012static inline void housekeeping_init(void) { }
13#endif /* CONFIG_NO_HZ_FULL */
14
Frederic Weisbecker9f0ca2d2017-10-27 04:42:30 +020015static inline int housekeeping_any_cpu(void)
16{
17#ifdef CONFIG_NO_HZ_FULL
18 if (tick_nohz_full_enabled())
19 return cpumask_any_and(housekeeping_mask, cpu_online_mask);
20#endif
21 return smp_processor_id();
22}
Frederic Weisbecker78634062017-10-27 04:42:28 +020023
24static inline const struct cpumask *housekeeping_cpumask(void)
25{
26#ifdef CONFIG_NO_HZ_FULL
27 if (tick_nohz_full_enabled())
28 return housekeeping_mask;
29#endif
30 return cpu_possible_mask;
31}
32
33static inline bool is_housekeeping_cpu(int cpu)
34{
35#ifdef CONFIG_NO_HZ_FULL
36 if (tick_nohz_full_enabled())
37 return cpumask_test_cpu(cpu, housekeeping_mask);
38#endif
39 return true;
40}
41
42static inline void housekeeping_affine(struct task_struct *t)
43{
44#ifdef CONFIG_NO_HZ_FULL
45 if (tick_nohz_full_enabled())
46 set_cpus_allowed_ptr(t, housekeeping_mask);
47
48#endif
49}
50
51#endif /* _LINUX_SCHED_ISOLATION_H */