xref: /linux/mm/damon/sysfs-common.h (revision fab183d632628381b466a41479489541ac0e29a0)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Common Code for DAMON Sysfs Interface
4  */
5 
6 #include <linux/damon.h>
7 #include <linux/kobject.h>
8 
9 extern struct mutex damon_sysfs_lock;
10 
11 struct damon_sysfs_ul_range {
12 	struct kobject kobj;
13 	unsigned long min;
14 	unsigned long max;
15 };
16 
17 struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
18 		unsigned long min,
19 		unsigned long max);
20 void damon_sysfs_ul_range_release(struct kobject *kobj);
21 
22 extern const struct kobj_type damon_sysfs_ul_range_ktype;
23 
24 /*
25  * schemes directory
26  */
27 
28 struct damon_sysfs_schemes {
29 	struct kobject kobj;
30 	struct damon_sysfs_scheme **schemes_arr;
31 	int nr;
32 };
33 
34 struct damon_sysfs_schemes *damon_sysfs_schemes_alloc(void);
35 void damon_sysfs_schemes_rm_dirs(struct damon_sysfs_schemes *schemes);
36 
37 extern const struct kobj_type damon_sysfs_schemes_ktype;
38 
39 int damon_sysfs_add_schemes(struct damon_ctx *ctx,
40 		struct damon_sysfs_schemes *sysfs_schemes);
41 
42 void damon_sysfs_schemes_update_stats(
43 		struct damon_sysfs_schemes *sysfs_schemes,
44 		struct damon_ctx *ctx);
45 
46 void damos_sysfs_populate_region_dir(struct damon_sysfs_schemes *sysfs_schemes,
47 		struct damon_ctx *ctx, struct damon_target *t,
48 		struct damon_region *r, struct damos *s,
49 		bool total_bytes_only, unsigned long sz_filter_passed);
50 
51 int damon_sysfs_schemes_clear_regions(
52 		struct damon_sysfs_schemes *sysfs_schemes);
53 
54 int damos_sysfs_set_quota_scores(struct damon_sysfs_schemes *sysfs_schemes,
55 		struct damon_ctx *ctx);
56 
57 void damos_sysfs_update_effective_quotas(
58 		struct damon_sysfs_schemes *sysfs_schemes,
59 		struct damon_ctx *ctx);
60 
61 int damon_sysfs_memcg_path_to_id(char *memcg_path, u64 *id);
62