162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Common Primitives for DAMON Sysfs Interface 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Author: SeongJae Park <sj@kernel.org> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/damon.h> 962306a36Sopenharmony_ci#include <linux/kobject.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ciextern struct mutex damon_sysfs_lock; 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct damon_sysfs_ul_range { 1462306a36Sopenharmony_ci struct kobject kobj; 1562306a36Sopenharmony_ci unsigned long min; 1662306a36Sopenharmony_ci unsigned long max; 1762306a36Sopenharmony_ci}; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistruct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc( 2062306a36Sopenharmony_ci unsigned long min, 2162306a36Sopenharmony_ci unsigned long max); 2262306a36Sopenharmony_civoid damon_sysfs_ul_range_release(struct kobject *kobj); 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciextern const struct kobj_type damon_sysfs_ul_range_ktype; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/* 2762306a36Sopenharmony_ci * schemes directory 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct damon_sysfs_schemes { 3162306a36Sopenharmony_ci struct kobject kobj; 3262306a36Sopenharmony_ci struct damon_sysfs_scheme **schemes_arr; 3362306a36Sopenharmony_ci int nr; 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistruct damon_sysfs_schemes *damon_sysfs_schemes_alloc(void); 3762306a36Sopenharmony_civoid damon_sysfs_schemes_rm_dirs(struct damon_sysfs_schemes *schemes); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciextern const struct kobj_type damon_sysfs_schemes_ktype; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciint damon_sysfs_set_schemes(struct damon_ctx *ctx, 4262306a36Sopenharmony_ci struct damon_sysfs_schemes *sysfs_schemes); 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_civoid damon_sysfs_schemes_update_stats( 4562306a36Sopenharmony_ci struct damon_sysfs_schemes *sysfs_schemes, 4662306a36Sopenharmony_ci struct damon_ctx *ctx); 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ciint damon_sysfs_schemes_update_regions_start( 4962306a36Sopenharmony_ci struct damon_sysfs_schemes *sysfs_schemes, 5062306a36Sopenharmony_ci struct damon_ctx *ctx, bool total_bytes_only); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ciint damon_sysfs_schemes_update_regions_stop(struct damon_ctx *ctx); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciint damon_sysfs_schemes_clear_regions( 5562306a36Sopenharmony_ci struct damon_sysfs_schemes *sysfs_schemes, 5662306a36Sopenharmony_ci struct damon_ctx *ctx); 57