xref: /openbmc/linux/tools/testing/selftests/cgroup/cgroup_util.h (revision b181f7029bd71238ac2754ce7052dffd69432085)
184092dbcSRoman Gushchin /* SPDX-License-Identifier: GPL-2.0 */
258c9f75bSMichal Koutný #include <stdbool.h>
384092dbcSRoman Gushchin #include <stdlib.h>
484092dbcSRoman Gushchin 
572a571d1SShuah Khan #include "../kselftest.h"
684092dbcSRoman Gushchin 
772a571d1SShuah Khan #define PAGE_SIZE 4096
884092dbcSRoman Gushchin 
984092dbcSRoman Gushchin #define MB(x) (x << 20)
1084092dbcSRoman Gushchin 
113c879a1bSDavid Vernet #define USEC_PER_SEC	1000000L
123c879a1bSDavid Vernet #define NSEC_PER_SEC	1000000000L
133c879a1bSDavid Vernet 
1412101424SMichal Koutný #define TEST_UID	65534 /* usually nobody, any !root is fine */
1512101424SMichal Koutný 
1684092dbcSRoman Gushchin /*
1784092dbcSRoman Gushchin  * Checks if two given values differ by less than err% of their sum.
1884092dbcSRoman Gushchin  */
values_close(long a,long b,int err)1984092dbcSRoman Gushchin static inline int values_close(long a, long b, int err)
2084092dbcSRoman Gushchin {
2184092dbcSRoman Gushchin 	return abs(a - b) <= (a + b) / 100 * err;
2284092dbcSRoman Gushchin }
2384092dbcSRoman Gushchin 
24*c81b6d64STianchen Ding extern int cg_find_unified_root(char *root, size_t len, bool *nsdelegate);
2584092dbcSRoman Gushchin extern char *cg_name(const char *root, const char *name);
2684092dbcSRoman Gushchin extern char *cg_name_indexed(const char *root, const char *name, int index);
275313bfe4SRoman Gushchin extern char *cg_control(const char *cgroup, const char *control);
2884092dbcSRoman Gushchin extern int cg_create(const char *cgroup);
2984092dbcSRoman Gushchin extern int cg_destroy(const char *cgroup);
3084092dbcSRoman Gushchin extern int cg_read(const char *cgroup, const char *control,
3184092dbcSRoman Gushchin 		   char *buf, size_t len);
3284092dbcSRoman Gushchin extern int cg_read_strcmp(const char *cgroup, const char *control,
3384092dbcSRoman Gushchin 			  const char *expected);
3484092dbcSRoman Gushchin extern int cg_read_strstr(const char *cgroup, const char *control,
3584092dbcSRoman Gushchin 			  const char *needle);
3684092dbcSRoman Gushchin extern long cg_read_long(const char *cgroup, const char *control);
3784092dbcSRoman Gushchin long cg_read_key_long(const char *cgroup, const char *control, const char *key);
3811318989SMichal Koutný extern long cg_read_lc(const char *cgroup, const char *control);
3984092dbcSRoman Gushchin extern int cg_write(const char *cgroup, const char *control, char *buf);
406376b22cSDavid Vernet int cg_write_numeric(const char *cgroup, const char *control, long value);
4184092dbcSRoman Gushchin extern int cg_run(const char *cgroup,
4284092dbcSRoman Gushchin 		  int (*fn)(const char *cgroup, void *arg),
4384092dbcSRoman Gushchin 		  void *arg);
445313bfe4SRoman Gushchin extern int cg_enter(const char *cgroup, int pid);
45d863cb03SClaudio extern int cg_enter_current(const char *cgroup);
4658c9f75bSMichal Koutný extern int cg_enter_current_thread(const char *cgroup);
4784092dbcSRoman Gushchin extern int cg_run_nowait(const char *cgroup,
4884092dbcSRoman Gushchin 			 int (*fn)(const char *cgroup, void *arg),
4984092dbcSRoman Gushchin 			 void *arg);
5084092dbcSRoman Gushchin extern int get_temp_fd(void);
5184092dbcSRoman Gushchin extern int alloc_pagecache(int fd, size_t size);
5284092dbcSRoman Gushchin extern int alloc_anon(const char *cgroup, void *arg);
53478b2784SMike Rapoport extern int is_swap_enabled(void);
54a987785dSJay Kamat extern int set_oom_adj_score(int pid, int score);
555313bfe4SRoman Gushchin extern int cg_wait_for_proc_count(const char *cgroup, int count);
565313bfe4SRoman Gushchin extern int cg_killall(const char *cgroup);
57cdc69458SDavid Vernet int proc_mount_contains(const char *option);
5858c9f75bSMichal Koutný extern ssize_t proc_read_text(int pid, bool thread, const char *item, char *buf, size_t size);
5911318989SMichal Koutný extern int proc_read_strstr(int pid, bool thread, const char *item, const char *needle);
609bd5910dSChristian Brauner extern pid_t clone_into_cgroup(int cgroup_fd);
619bd5910dSChristian Brauner extern int clone_reap(pid_t pid, int options);
629bd5910dSChristian Brauner extern int clone_into_cgroup_run_wait(const char *cgroup);
639bd5910dSChristian Brauner extern int dirfd_open_opath(const char *dir);
648075e4f6SChristian Brauner extern int cg_prepare_for_wait(const char *cgroup);
656323ec54SShakeel Butt extern int memcg_prepare_for_wait(const char *cgroup);
668075e4f6SChristian Brauner extern int cg_wait_for(int fd);
67