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