mm/damon/core: remove damon_callback

All damon_callback usages are replicated by damon_call() and damos_walk().
Time to say goodbye.  Remove damon_callback.

Link: https://lkml.kernel.org/r/20250712195016.151108-15-sj@kernel.org
Signed-off-by: SeongJae Park <sj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
pull/1311/head
SeongJae Park 2025-07-12 12:50:16 -07:00 committed by Andrew Morton
parent 0c96decca5
commit 5add26c0a1
2 changed files with 8 additions and 49 deletions

View File

@ -629,34 +629,6 @@ struct damon_operations {
void (*cleanup)(struct damon_ctx *context);
};
/**
* struct damon_callback - Monitoring events notification callbacks.
*
* @after_wmarks_check: Called after each schemes' watermarks check.
* @after_aggregation: Called after each aggregation.
* @before_terminate: Called before terminating the monitoring.
*
* The monitoring thread (&damon_ctx.kdamond) calls @before_terminate just
* before finishing the monitoring.
*
* The monitoring thread calls @after_wmarks_check after each DAMON-based
* operation schemes' watermarks check. If users need to make changes to the
* attributes of the monitoring context while it's deactivated due to the
* watermarks, this is the good place to do.
*
* The monitoring thread calls @after_aggregation for each of the aggregation
* intervals. Therefore, users can safely access the monitoring results
* without additional protection. For the reason, users are recommended to use
* these callback for the accesses to the results.
*
* If any callback returns non-zero, monitoring stops.
*/
struct damon_callback {
int (*after_wmarks_check)(struct damon_ctx *context);
int (*after_aggregation)(struct damon_ctx *context);
void (*before_terminate)(struct damon_ctx *context);
};
/*
* struct damon_call_control - Control damon_call().
*
@ -727,7 +699,7 @@ struct damon_intervals_goal {
* ``mmap()`` calls from the application, in case of virtual memory monitoring)
* and applies the changes for each @ops_update_interval. All time intervals
* are in micro-seconds. Please refer to &struct damon_operations and &struct
* damon_callback for more detail.
* damon_call_control for more detail.
*/
struct damon_attrs {
unsigned long sample_interval;
@ -816,7 +788,6 @@ struct damon_ctx {
struct mutex kdamond_lock;
struct damon_operations ops;
struct damon_callback callback;
struct list_head adaptive_targets;
struct list_head schemes;

View File

@ -680,9 +680,7 @@ static bool damon_valid_intervals_goal(struct damon_attrs *attrs)
* @attrs: monitoring attributes
*
* This function should be called while the kdamond is not running, an access
* check results aggregation is not ongoing (e.g., from &struct
* damon_callback->after_aggregation or &struct
* damon_callback->after_wmarks_check callbacks), or from damon_call().
* check results aggregation is not ongoing (e.g., from damon_call().
*
* Every time interval is in micro-seconds.
*
@ -778,7 +776,7 @@ static void damos_commit_quota_goal(
* DAMON contexts, instead of manual in-place updates.
*
* This function should be called from parameters-update safe context, like
* DAMON callbacks.
* damon_call().
*/
int damos_commit_quota_goals(struct damos_quota *dst, struct damos_quota *src)
{
@ -1177,7 +1175,7 @@ static int damon_commit_targets(
* in-place updates.
*
* This function should be called from parameters-update safe context, like
* DAMON callbacks.
* damon_call().
*/
int damon_commit_ctx(struct damon_ctx *dst, struct damon_ctx *src)
{
@ -2484,9 +2482,6 @@ static int kdamond_wait_activation(struct damon_ctx *ctx)
kdamond_usleep(min_wait_time);
if (ctx->callback.after_wmarks_check &&
ctx->callback.after_wmarks_check(ctx))
break;
kdamond_call(ctx, false);
damos_walk_cancel(ctx);
}
@ -2543,10 +2538,9 @@ static int kdamond_fn(void *data)
while (!kdamond_need_stop(ctx)) {
/*
* ctx->attrs and ctx->next_{aggregation,ops_update}_sis could
* be changed from after_wmarks_check() or after_aggregation()
* callbacks. Read the values here, and use those for this
* iteration. That is, damon_set_attrs() updated new values
* are respected from next iteration.
* be changed from kdamond_call(). Read the values here, and
* use those for this iteration. That is, damon_set_attrs()
* updated new values are respected from next iteration.
*/
unsigned long next_aggregation_sis = ctx->next_aggregation_sis;
unsigned long next_ops_update_sis = ctx->next_ops_update_sis;
@ -2564,14 +2558,10 @@ static int kdamond_fn(void *data)
if (ctx->ops.check_accesses)
max_nr_accesses = ctx->ops.check_accesses(ctx);
if (ctx->passed_sample_intervals >= next_aggregation_sis) {
if (ctx->passed_sample_intervals >= next_aggregation_sis)
kdamond_merge_regions(ctx,
max_nr_accesses / 10,
sz_limit);
if (ctx->callback.after_aggregation &&
ctx->callback.after_aggregation(ctx))
break;
}
/*
* do kdamond_call() and kdamond_apply_schemes() after
@ -2637,8 +2627,6 @@ done:
damon_destroy_region(r, t);
}
if (ctx->callback.before_terminate)
ctx->callback.before_terminate(ctx);
if (ctx->ops.cleanup)
ctx->ops.cleanup(ctx);
kfree(ctx->regions_score_histogram);