1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Common Primitives for DAMON Sysfs Interface
4 *
5 * Author: SeongJae Park <sj@kernel.org>
6 */
7
8#include <linux/damon.h>
9#include <linux/kobject.h>
10
11extern struct mutex damon_sysfs_lock;
12
13struct damon_sysfs_ul_range {
14	struct kobject kobj;
15	unsigned long min;
16	unsigned long max;
17};
18
19struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
20		unsigned long min,
21		unsigned long max);
22void damon_sysfs_ul_range_release(struct kobject *kobj);
23
24extern const struct kobj_type damon_sysfs_ul_range_ktype;
25
26/*
27 * schemes directory
28 */
29
30struct damon_sysfs_schemes {
31	struct kobject kobj;
32	struct damon_sysfs_scheme **schemes_arr;
33	int nr;
34};
35
36struct damon_sysfs_schemes *damon_sysfs_schemes_alloc(void);
37void damon_sysfs_schemes_rm_dirs(struct damon_sysfs_schemes *schemes);
38
39extern const struct kobj_type damon_sysfs_schemes_ktype;
40
41int damon_sysfs_set_schemes(struct damon_ctx *ctx,
42		struct damon_sysfs_schemes *sysfs_schemes);
43
44void damon_sysfs_schemes_update_stats(
45		struct damon_sysfs_schemes *sysfs_schemes,
46		struct damon_ctx *ctx);
47
48int damon_sysfs_schemes_update_regions_start(
49		struct damon_sysfs_schemes *sysfs_schemes,
50		struct damon_ctx *ctx, bool total_bytes_only);
51
52void damos_sysfs_mark_finished_regions_updates(struct damon_ctx *ctx);
53
54bool damos_sysfs_regions_upd_done(void);
55
56int damon_sysfs_schemes_update_regions_stop(struct damon_ctx *ctx);
57
58int damon_sysfs_schemes_clear_regions(
59		struct damon_sysfs_schemes *sysfs_schemes,
60		struct damon_ctx *ctx);
61
62int damos_sysfs_set_quota_scores(struct damon_sysfs_schemes *sysfs_schemes,
63		struct damon_ctx *ctx);
64
65void damos_sysfs_update_effective_quotas(
66		struct damon_sysfs_schemes *sysfs_schemes,
67		struct damon_ctx *ctx);
68