blob: ed935ffc6ffa70ef29bb39cfb2b06310629df4f5 [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
Frederic Weisbecker7e56a1c2017-10-27 04:42:31 +02009extern int housekeeping_any_cpu(void);
10extern const struct cpumask *housekeeping_cpumask(void);
11extern void housekeeping_affine(struct task_struct *t);
12extern bool housekeeping_test_cpu(int cpu);
Frederic Weisbecker78634062017-10-27 04:42:28 +020013extern void __init housekeeping_init(void);
Frederic Weisbecker7e56a1c2017-10-27 04:42:31 +020014
Frederic Weisbecker78634062017-10-27 04:42:28 +020015#else
Frederic Weisbecker78634062017-10-27 04:42:28 +020016
Frederic Weisbecker9f0ca2d2017-10-27 04:42:30 +020017static inline int housekeeping_any_cpu(void)
18{
Frederic Weisbecker9f0ca2d2017-10-27 04:42:30 +020019 return smp_processor_id();
20}
Frederic Weisbecker78634062017-10-27 04:42:28 +020021
22static inline const struct cpumask *housekeeping_cpumask(void)
23{
Frederic Weisbecker78634062017-10-27 04:42:28 +020024 return cpu_possible_mask;
25}
26
Frederic Weisbecker7e56a1c2017-10-27 04:42:31 +020027static inline void housekeeping_affine(struct task_struct *t) { }
28static inline void housekeeping_init(void) { }
29#endif /* CONFIG_NO_HZ_FULL */
30
Frederic Weisbecker78634062017-10-27 04:42:28 +020031static inline bool is_housekeeping_cpu(int cpu)
32{
33#ifdef CONFIG_NO_HZ_FULL
34 if (tick_nohz_full_enabled())
Frederic Weisbecker7e56a1c2017-10-27 04:42:31 +020035 return housekeeping_test_cpu(cpu);
Frederic Weisbecker78634062017-10-27 04:42:28 +020036#endif
37 return true;
38}
39
Frederic Weisbecker78634062017-10-27 04:42:28 +020040#endif /* _LINUX_SCHED_ISOLATION_H */