mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
mm/damon/core: add complement argument to damos_new_quota_goal()
damos_quota_goal->complement needs to be manually set by each API callers. It is easy to make mistakes. Extend the quota goal constructor, damos_new_quota_goal() to receive and set the complement flag value. Also update all callers to use the new signature. Link: https://lore.kernel.org/20260929080113.41708-3-sj@kernel.org Signed-off-by: SJ Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Asier Gutierrez <gutierrez.asier@huawei-partners.com>
This commit is contained in:
parent
de6632aa78
commit
89d16e8622
|
|
@ -1090,7 +1090,7 @@ bool damos_filter_for_ops(enum damos_filter_type type);
|
|||
void damos_destroy_filter(struct damos_filter *f);
|
||||
|
||||
struct damos_quota_goal *damos_new_quota_goal(
|
||||
enum damos_quota_goal_metric metric,
|
||||
enum damos_quota_goal_metric metric, bool complement,
|
||||
unsigned long target_value);
|
||||
void damos_add_quota_goal(struct damos_quota *q, struct damos_quota_goal *g);
|
||||
void damos_destroy_quota_goal(struct damos_quota_goal *goal);
|
||||
|
|
|
|||
|
|
@ -691,7 +691,7 @@ void damos_destroy_filter(struct damos_filter *f)
|
|||
}
|
||||
|
||||
struct damos_quota_goal *damos_new_quota_goal(
|
||||
enum damos_quota_goal_metric metric,
|
||||
enum damos_quota_goal_metric metric, bool complement,
|
||||
unsigned long target_value)
|
||||
{
|
||||
struct damos_quota_goal *goal;
|
||||
|
|
@ -700,6 +700,7 @@ struct damos_quota_goal *damos_new_quota_goal(
|
|||
if (!goal)
|
||||
return NULL;
|
||||
goal->metric = metric;
|
||||
goal->complement = complement;
|
||||
goal->target_value = target_value;
|
||||
if (metric == DAMOS_QUOTA_SOME_MEM_PSI_US)
|
||||
goal->last_psi_total = U64_MAX;
|
||||
|
|
@ -1262,8 +1263,8 @@ int damos_commit_quota_goals(struct damos_quota *dst, struct damos_quota *src)
|
|||
damos_for_each_quota_goal_safe(src_goal, next, src) {
|
||||
if (j++ < i)
|
||||
continue;
|
||||
new_goal = damos_new_quota_goal(
|
||||
src_goal->metric, src_goal->target_value);
|
||||
new_goal = damos_new_quota_goal(src_goal->metric,
|
||||
src_goal->complement, src_goal->target_value);
|
||||
if (!new_goal)
|
||||
return -ENOMEM;
|
||||
err = damos_commit_quota_goal(new_goal, src_goal);
|
||||
|
|
|
|||
|
|
@ -233,12 +233,13 @@ static int damon_lru_sort_add_quota_goals(struct damos *hot_scheme,
|
|||
|
||||
if (!active_mem_bp)
|
||||
return 0;
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_ACTIVE_MEM_BP, active_mem_bp);
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_ACTIVE_MEM_BP, false,
|
||||
active_mem_bp);
|
||||
if (!goal)
|
||||
return -ENOMEM;
|
||||
damos_add_quota_goal(&hot_scheme->quota, goal);
|
||||
/* aim 0.2 % goal conflict, to keep little ping pong */
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_INACTIVE_MEM_BP,
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_INACTIVE_MEM_BP, false,
|
||||
10000 - active_mem_bp + 2);
|
||||
if (!goal)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
|
|
@ -233,7 +233,7 @@ static int damon_reclaim_apply_parameters(void)
|
|||
damon_set_schemes(param_ctx, &scheme, 1);
|
||||
|
||||
if (quota_mem_pressure_us) {
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_SOME_MEM_PSI_US,
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_SOME_MEM_PSI_US, false,
|
||||
quota_mem_pressure_us);
|
||||
if (!goal)
|
||||
goto out;
|
||||
|
|
@ -241,7 +241,8 @@ static int damon_reclaim_apply_parameters(void)
|
|||
}
|
||||
|
||||
if (quota_autotune_feedback) {
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_USER_INPUT, 10000);
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_USER_INPUT, false,
|
||||
10000);
|
||||
if (!goal)
|
||||
goto out;
|
||||
goal->current_value = quota_autotune_feedback;
|
||||
|
|
|
|||
|
|
@ -2869,7 +2869,7 @@ static int damos_sysfs_add_quota_score(
|
|||
if (!sysfs_goal->target_value)
|
||||
continue;
|
||||
|
||||
goal = damos_new_quota_goal(sysfs_goal->metric,
|
||||
goal = damos_new_quota_goal(sysfs_goal->metric, false,
|
||||
sysfs_goal->target_value);
|
||||
if (!goal)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
|
|
@ -1014,6 +1014,7 @@ static void damos_test_commit_quota_goals_for(struct kunit *test,
|
|||
* Make it kfree()-able.
|
||||
*/
|
||||
goal = damos_new_quota_goal(dst_goals[i].metric,
|
||||
dst_goals[i].complement,
|
||||
dst_goals[i].target_value);
|
||||
if (!goal)
|
||||
goto out;
|
||||
|
|
@ -2411,7 +2412,7 @@ static void damos_test_esz_goal_temporal(struct kunit *test)
|
|||
}
|
||||
damon_add_scheme(ctx, s);
|
||||
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_USER_INPUT, 10000);
|
||||
goal = damos_new_quota_goal(DAMOS_QUOTA_USER_INPUT, false, 10000);
|
||||
if (!goal) {
|
||||
damon_destroy_ctx(ctx);
|
||||
kunit_skip(test, "quota goal alloc fail");
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ static struct damon_ctx *damon_sample_mtier_build_ctx(bool promote)
|
|||
damon_set_schemes(ctx, &scheme, 1);
|
||||
quota_goal = damos_new_quota_goal(
|
||||
promote ? DAMOS_QUOTA_NODE_MEM_USED_BP :
|
||||
DAMOS_QUOTA_NODE_MEM_FREE_BP,
|
||||
DAMOS_QUOTA_NODE_MEM_FREE_BP, false,
|
||||
promote ? node0_mem_used_bp : node0_mem_free_bp);
|
||||
if (!quota_goal)
|
||||
goto free_out;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user