[PATCH] sched/numa, mm: Skip page promotion if cpu pid is valid

From: Donet Tom

Date: Thu Mar 26 2026 - 03:10:04 EST


If memory tiering is disabled, cpupid of slow memory pages may
contain a valid CPU and PID. If tiering is enabled at runtime,
there is a chance that in should_numa_migrate_memory(), this
valid CPU/PID is treated as a last access timestamp, leading
to unnecessary promotion.

Prevent this by skipping promotion when cpupid is valid.

Signed-off-by: Donet Tom <donettom@xxxxxxxxxxxxx>
---
kernel/sched/fair.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 4b43809a3fb1..f5830a5a94d5 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -2001,6 +2001,13 @@ bool should_numa_migrate_memory(struct task_struct *p, struct folio *folio,
unsigned int latency, th, def_th;
long nr = folio_nr_pages(folio);

+ /* When tiering is enabled at runtime, last_cpupid may
+ * hold a valid cpupid instead of an access timestamp.
+ * If so, skip page promotion.
+ */
+ if (cpupid_valid(folio_last_cpupid(folio)))
+ return false;
+
pgdat = NODE_DATA(dst_nid);
if (pgdat_free_space_enough(pgdat)) {
/* workload changed, reset hot threshold */
--
2.47.1