mm-damon-core-handle-uninitialized-damos_quota_goal-last_psi_total-fix.patch removed from -mm tree
The quilt patch titled
Subject: mm/damon/core: keep the temporal tuner quota over an unmeasured PSI round
has been removed from the -mm tree. Its filename was
mm-damon-core-handle-uninitialized-damos_quota_goal-last_psi_total-fix.patch
This patch was dropped because it was merged into the mm-stable branch of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
------------------------------------------------------
From: Karl Mehltretter <[email protected]>
Subject: mm/damon/core: keep the temporal tuner quota over an unmeasured PSI round
Date: Tue, 22 Sep 2026 22:51:37 -0700
The patch in mm-unstable of subject "mm/damon/core: handle uninitialized damos_quota_goal->last_psi_total" scores a PSI quota goal without a previous sample as achieved. This leaves the consist tuner's input unchanged, but the temporal tuner sets its quota to zero for an achieved goal. A running scheme with a nonzero temporal quota therefore loses a charge window after a quota-goal commit.
Use the effective quota to preserve the temporal tuner's previous goal-achievement state during an unmeasured round, as SJ suggested [1]. Score the goal as achieved when the effective quota is zero and as not achieved otherwise. A new scheme's initially zero quota stays zero, and the consist tuner's behavior is unchanged.
Move the PSI current-value calculation and last_psi_total update into a helper that takes the current PSI total. This lets a unit test cover the unmeasured and measured rounds without depending on system memory pressure.
---
mm/damon/core.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-)
mm/damon/core.c renamed from mm/damon/core.c~mm-damon-core-handle-uninitialized-damos_quota_goal-last_psi_total-fix +23 -7
@@ -2891,6 +2891,28 @@ static inline u64 damos_get_some_mem_psi#endif /* CONFIG_PSI */ +static void damos_set_psi_current_val (u64 now_psi_total, +struct damos_quota_goal *goal,struct damos *s) +{ +u64 last_psi_total = goal->last_psi_total; + + goal->last_psi_total = now_psi_total; +if (last_psi_total !=U64_MAX ) { + goal->current_value = now_psi_total - last_psi_total; +return ; + } +/* uninitialized last_psi_total; make no effect this round */ +if (s->quota.goal_tuner ==DAMOS_QUOTA_GOAL_TUNER_CONSIST ) { + goal->current_value = goal->target_value; +return ; + } +/* let temporal tuner show the same achievement as in the last round */ +if (!s->quota.esz) + goal->current_value = goal->target_value; +else + goal->current_value =0 ; +} +#ifdef CONFIG_NUMA static bool invalid_mem_node (int nid) {
@@ -3143,13 +3165,7 @@ static void damos_set_quota_goal_currentbreak ;case DAMOS_QUOTA_SOME_MEM_PSI_US : now_psi_total =damos_get_some_mem_psi_total (); -/* uninitialized last_psi_total; make no effect this round */ -if (goal->last_psi_total ==U64_MAX ) - goal->current_value = goal->target_value; -else - goal->current_value = now_psi_total - - goal->last_psi_total; - goal->last_psi_total = now_psi_total; +damos_set_psi_current_val (now_psi_total, goal, s);break ;case DAMOS_QUOTA_NODE_MEM_USED_BP :case DAMOS_QUOTA_NODE_MEM_FREE_BP :
_
Patches currently in -mm which might be from [email protected] are
docs-mm-ksm-use-the-renamed-ksm-structure-names.patch mm-secretmem-fix-the-enable-parameter-description.patch mm-damon-core-preserve-the-quota-passed-to-damon_new_scheme.patch mm-damon-tests-core-kunit-test-preservation-of-quota-state.patch mm-damon-tests-core-kunit-test-psi-goal-values-with-explicit-samples.patch klist-avoid-accesses-after-waking-klist_remove.patch squashfs-fix-fragment-index-table-sizing-overflow-on-32-bit.patch squashfs-make-the-fragment-index-table-bounds-check-overflow-safe.patch fork-honor-task_structs-declared-alignment.patch ocfs2-cluster-hold-a-reference-on-the-heartbeat-thread.patch resource-kunit-stop-selecting-get_free_region.patch kcov-report-spurious-pcs-in-the-interrupt-selftest.patch