]> git.ipfire.org Git - thirdparty/linux.git/commit
mm/codetag: swap tags when migrate pages
authorDavid Wang <00107082@163.com>
Fri, 29 Nov 2024 02:52:13 +0000 (10:52 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 6 Dec 2024 03:54:46 +0000 (19:54 -0800)
commit51f43d5d82ed2ba3f9a3f9a2390c52f28e42af32
tree961b53d177c732103bfef31aed4c748d6090b874
parent914eec5e980171bc128e7e24f7a22aa1d803570e
mm/codetag: swap tags when migrate pages

Current solution to adjust codetag references during page migration is
done in 3 steps:

1. sets the codetag reference of the old page as empty (not pointing
   to any codetag);

2. subtracts counters of the new page to compensate for its own
   allocation;

3. sets codetag reference of the new page to point to the codetag of
   the old page.

This does not work if CONFIG_MEM_ALLOC_PROFILING_DEBUG=n because
set_codetag_empty() becomes NOOP.  Instead, let's simply swap codetag
references so that the new page is referencing the old codetag and the old
page is referencing the new codetag.  This way accounting stays valid and
the logic makes more sense.

Link: https://lkml.kernel.org/r/20241129025213.34836-1-00107082@163.com
Fixes: e0a955bf7f61 ("mm/codetag: add pgalloc_tag_copy()")
Signed-off-by: David Wang <00107082@163.com>
Closes: https://lore.kernel.org/lkml/20241124074318.399027-1-00107082@163.com/
Acked-by: Suren Baghdasaryan <surenb@google.com>
Suggested-by: Suren Baghdasaryan <surenb@google.com>
Acked-by: Yu Zhao <yuzhao@google.com>
Cc: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/pgalloc_tag.h
lib/alloc_tag.c
mm/migrate.c