xref: /linux/mm/damon/sysfs-common.h (revision 9e736fdf)
139240595SSeongJae Park /* SPDX-License-Identifier: GPL-2.0 */
239240595SSeongJae Park /*
339240595SSeongJae Park  * Common Primitives for DAMON Sysfs Interface
439240595SSeongJae Park  *
539240595SSeongJae Park  * Author: SeongJae Park <sj@kernel.org>
639240595SSeongJae Park  */
739240595SSeongJae Park 
839240595SSeongJae Park #include <linux/damon.h>
939240595SSeongJae Park #include <linux/kobject.h>
1039240595SSeongJae Park 
1139240595SSeongJae Park extern struct mutex damon_sysfs_lock;
12d332fe11SSeongJae Park 
13d332fe11SSeongJae Park struct damon_sysfs_ul_range {
14d332fe11SSeongJae Park 	struct kobject kobj;
15d332fe11SSeongJae Park 	unsigned long min;
16d332fe11SSeongJae Park 	unsigned long max;
17d332fe11SSeongJae Park };
18d332fe11SSeongJae Park 
19d332fe11SSeongJae Park struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
20d332fe11SSeongJae Park 		unsigned long min,
21d332fe11SSeongJae Park 		unsigned long max);
22d332fe11SSeongJae Park void damon_sysfs_ul_range_release(struct kobject *kobj);
23d332fe11SSeongJae Park 
24e56397e8SThomas Weißschuh extern const struct kobj_type damon_sysfs_ul_range_ktype;
25c8e7b4d0SSeongJae Park 
26c8e7b4d0SSeongJae Park /*
27c8e7b4d0SSeongJae Park  * schemes directory
28c8e7b4d0SSeongJae Park  */
29c8e7b4d0SSeongJae Park 
30c8e7b4d0SSeongJae Park struct damon_sysfs_schemes {
31c8e7b4d0SSeongJae Park 	struct kobject kobj;
32c8e7b4d0SSeongJae Park 	struct damon_sysfs_scheme **schemes_arr;
33c8e7b4d0SSeongJae Park 	int nr;
34c8e7b4d0SSeongJae Park };
35c8e7b4d0SSeongJae Park 
36c8e7b4d0SSeongJae Park struct damon_sysfs_schemes *damon_sysfs_schemes_alloc(void);
37c8e7b4d0SSeongJae Park void damon_sysfs_schemes_rm_dirs(struct damon_sysfs_schemes *schemes);
38c8e7b4d0SSeongJae Park 
39e56397e8SThomas Weißschuh extern const struct kobj_type damon_sysfs_schemes_ktype;
40c8e7b4d0SSeongJae Park 
41c8e7b4d0SSeongJae Park int damon_sysfs_set_schemes(struct damon_ctx *ctx,
42c8e7b4d0SSeongJae Park 		struct damon_sysfs_schemes *sysfs_schemes);
43c8e7b4d0SSeongJae Park 
44c8e7b4d0SSeongJae Park void damon_sysfs_schemes_update_stats(
45c8e7b4d0SSeongJae Park 		struct damon_sysfs_schemes *sysfs_schemes,
46c8e7b4d0SSeongJae Park 		struct damon_ctx *ctx);
47f1d13cacSSeongJae Park 
48f1d13cacSSeongJae Park int damon_sysfs_schemes_update_regions_start(
49f1d13cacSSeongJae Park 		struct damon_sysfs_schemes *sysfs_schemes,
506ad243b8SSeongJae Park 		struct damon_ctx *ctx, bool total_bytes_only);
51f1d13cacSSeongJae Park 
526a080670SSeongJae Park void damos_sysfs_mark_finished_regions_updates(struct damon_ctx *ctx);
536a080670SSeongJae Park 
5476126332SSeongJae Park bool damos_sysfs_regions_upd_done(void);
5576126332SSeongJae Park 
56f1d13cacSSeongJae Park int damon_sysfs_schemes_update_regions_stop(struct damon_ctx *ctx);
57772c15e5SSeongJae Park 
58772c15e5SSeongJae Park int damon_sysfs_schemes_clear_regions(
59772c15e5SSeongJae Park 		struct damon_sysfs_schemes *sysfs_schemes,
60772c15e5SSeongJae Park 		struct damon_ctx *ctx);
61d91beaa5SSeongJae Park 
62*9e736fdfSSeongJae Park int damos_sysfs_set_quota_scores(struct damon_sysfs_schemes *sysfs_schemes,
63d91beaa5SSeongJae Park 		struct damon_ctx *ctx);
64c71f8a71SSeongJae Park 
65c71f8a71SSeongJae Park void damos_sysfs_update_effective_quotas(
66c71f8a71SSeongJae Park 		struct damon_sysfs_schemes *sysfs_schemes,
67c71f8a71SSeongJae Park 		struct damon_ctx *ctx);
68