162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __CGROUP_H__
362306a36Sopenharmony_ci#define __CGROUP_H__
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/compiler.h>
662306a36Sopenharmony_ci#include <linux/refcount.h>
762306a36Sopenharmony_ci#include <linux/rbtree.h>
862306a36Sopenharmony_ci#include "util/env.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct option;
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct cgroup {
1362306a36Sopenharmony_ci	struct rb_node		node;
1462306a36Sopenharmony_ci	u64			id;
1562306a36Sopenharmony_ci	char			*name;
1662306a36Sopenharmony_ci	int			fd;
1762306a36Sopenharmony_ci	refcount_t		refcnt;
1862306a36Sopenharmony_ci};
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ciextern int nr_cgroups; /* number of explicit cgroups defined */
2162306a36Sopenharmony_ciextern bool cgrp_event_expanded;
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistruct cgroup *cgroup__get(struct cgroup *cgroup);
2462306a36Sopenharmony_civoid cgroup__put(struct cgroup *cgroup);
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistruct evlist;
2762306a36Sopenharmony_cistruct rblist;
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct cgroup *evlist__findnew_cgroup(struct evlist *evlist, const char *name);
3062306a36Sopenharmony_ciint evlist__expand_cgroup(struct evlist *evlist, const char *cgroups,
3162306a36Sopenharmony_ci			  struct rblist *metric_events, bool open_cgroup);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_civoid evlist__set_default_cgroup(struct evlist *evlist, struct cgroup *cgroup);
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciint parse_cgroups(const struct option *opt, const char *str, int unset);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistruct cgroup *cgroup__findnew(struct perf_env *env, uint64_t id,
3862306a36Sopenharmony_ci			       const char *path);
3962306a36Sopenharmony_cistruct cgroup *cgroup__find(struct perf_env *env, uint64_t id);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_civoid perf_env__purge_cgroups(struct perf_env *env);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci#ifdef HAVE_FILE_HANDLE
4462306a36Sopenharmony_ciint read_cgroup_id(struct cgroup *cgrp);
4562306a36Sopenharmony_ci#else
4662306a36Sopenharmony_cistatic inline int read_cgroup_id(struct cgroup *cgrp __maybe_unused)
4762306a36Sopenharmony_ci{
4862306a36Sopenharmony_ci	return -1;
4962306a36Sopenharmony_ci}
5062306a36Sopenharmony_ci#endif  /* HAVE_FILE_HANDLE */
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciint cgroup_is_v2(const char *subsys);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#endif /* __CGROUP_H__ */
55