diff options
Diffstat (limited to 'include/linux/psi.h')
-rw-r--r-- | include/linux/psi.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/include/linux/psi.h b/include/linux/psi.h new file mode 100644 index 000000000000..b825fa53d498 --- /dev/null +++ b/include/linux/psi.h @@ -0,0 +1,63 @@ +#ifndef _LINUX_PSI_H +#define _LINUX_PSI_H + +#include <linux/jump_label.h> +#include <linux/psi_types.h> +#include <linux/sched.h> +#include <linux/poll.h> +#include <linux/cgroup-defs.h> + +struct seq_file; +struct css_set; + +#ifdef CONFIG_PSI + +extern struct static_key_false psi_disabled; + +void psi_init(void); + +void psi_task_change(struct task_struct *task, int clear, int set); + +void psi_memstall_tick(struct task_struct *task, int cpu); +void psi_memstall_enter(unsigned long *flags); +void psi_memstall_leave(unsigned long *flags); + +int psi_show(struct seq_file *s, struct psi_group *group, enum psi_res res); + +#ifdef CONFIG_CGROUPS +int psi_cgroup_alloc(struct cgroup *cgrp); +void psi_cgroup_free(struct cgroup *cgrp); +void cgroup_move_task(struct task_struct *p, struct css_set *to); + +struct psi_trigger *psi_trigger_create(struct psi_group *group, + char *buf, size_t nbytes, enum psi_res res); +void psi_trigger_replace(void **trigger_ptr, struct psi_trigger *t); + +unsigned int psi_trigger_poll(void **trigger_ptr, struct file *file, + poll_table *wait); +#endif + +#else /* CONFIG_PSI */ + +static inline void psi_init(void) {} + +static inline void psi_memstall_enter(unsigned long *flags) {} +static inline void psi_memstall_leave(unsigned long *flags) {} + +#ifdef CONFIG_CGROUPS +static inline int psi_cgroup_alloc(struct cgroup *cgrp) +{ + return 0; +} +static inline void psi_cgroup_free(struct cgroup *cgrp) +{ +} +static inline void cgroup_move_task(struct task_struct *p, struct css_set *to) +{ + rcu_assign_pointer(p->cgroups, to); +} +#endif + +#endif /* CONFIG_PSI */ + +#endif /* _LINUX_PSI_H */ |