mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
76126332c7
DAMON_SYSFS assumes all schemes will be applied for at least one DAMON monitoring results snapshot within one aggregation interval, or makes no sense to wait for it while DAMON is deactivated by the watermarks. That for deactivated status still makes sense, but the aggregation interval based assumption is invalid now because each scheme can has its own apply interval. For schemes having larger than the aggregation or watermarks check interval, DAMOS tried regions update request can be finished without the update. Avoid the case by explicitly checking the status of the schemes tried regions update and watermarks based DAMON deactivation. Link: https://lkml.kernel.org/r/20231012192256.33556-3-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Common Primitives for DAMON Sysfs Interface
|
|
*
|
|
* Author: SeongJae Park <sj@kernel.org>
|
|
*/
|
|
|
|
#include <linux/damon.h>
|
|
#include <linux/kobject.h>
|
|
|
|
extern struct mutex damon_sysfs_lock;
|
|
|
|
struct damon_sysfs_ul_range {
|
|
struct kobject kobj;
|
|
unsigned long min;
|
|
unsigned long max;
|
|
};
|
|
|
|
struct damon_sysfs_ul_range *damon_sysfs_ul_range_alloc(
|
|
unsigned long min,
|
|
unsigned long max);
|
|
void damon_sysfs_ul_range_release(struct kobject *kobj);
|
|
|
|
extern const struct kobj_type damon_sysfs_ul_range_ktype;
|
|
|
|
/*
|
|
* schemes directory
|
|
*/
|
|
|
|
struct damon_sysfs_schemes {
|
|
struct kobject kobj;
|
|
struct damon_sysfs_scheme **schemes_arr;
|
|
int nr;
|
|
};
|
|
|
|
struct damon_sysfs_schemes *damon_sysfs_schemes_alloc(void);
|
|
void damon_sysfs_schemes_rm_dirs(struct damon_sysfs_schemes *schemes);
|
|
|
|
extern const struct kobj_type damon_sysfs_schemes_ktype;
|
|
|
|
int damon_sysfs_set_schemes(struct damon_ctx *ctx,
|
|
struct damon_sysfs_schemes *sysfs_schemes);
|
|
|
|
void damon_sysfs_schemes_update_stats(
|
|
struct damon_sysfs_schemes *sysfs_schemes,
|
|
struct damon_ctx *ctx);
|
|
|
|
int damon_sysfs_schemes_update_regions_start(
|
|
struct damon_sysfs_schemes *sysfs_schemes,
|
|
struct damon_ctx *ctx, bool total_bytes_only);
|
|
|
|
bool damos_sysfs_regions_upd_done(void);
|
|
|
|
int damon_sysfs_schemes_update_regions_stop(struct damon_ctx *ctx);
|
|
|
|
int damon_sysfs_schemes_clear_regions(
|
|
struct damon_sysfs_schemes *sysfs_schemes,
|
|
struct damon_ctx *ctx);
|