* [PATCH v2 0/3] Minor fixes for memory allocation profiling
@ 2025-09-15 21:27 Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 1/3] alloc_tag: use release_pages() in the cleanup path Suren Baghdasaryan
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Suren Baghdasaryan @ 2025-09-15 21:27 UTC (permalink / raw)
To: akpm
Cc: kent.overstreet, vbabka, hannes, usamaarif642, shakeel.butt,
00107082, pasha.tatashin, souravpanda, surenb, linux-mm,
linux-kernel
Over the last couple months I gathered a few reports of minor issues
in memory allocation profiling which are addressed in this patchset.
Patchset is based on mm-new after reverting previous version.
Changes since v1 [1]:
- Use release_pages() in free_mod_tags_mem() in [1/3], per Usama Arif
- Add comment for proc_mem_profiling_handler() in [2/3], per Usama Arif
- Add Acked-by, per Shakeel Butt and Usama Arif
- Fixed a typo in [1/3] changelog
[1] https://lore.kernel.org/all/20250909233409.1013367-1-surenb@google.com/
Suren Baghdasaryan (3):
alloc_tag: use release_pages() in the cleanup path
alloc_tag: prevent enabling memory profiling if it was shut down
alloc_tag: avoid warnings when freeing non-compound "tail" pages
lib/alloc_tag.c | 26 ++++++++++++++++++++------
mm/page_alloc.c | 9 ++++++++-
2 files changed, 28 insertions(+), 7 deletions(-)
--
2.51.0.384.g4c02a37b29-goog
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/3] alloc_tag: use release_pages() in the cleanup path
2025-09-15 21:27 [PATCH v2 0/3] Minor fixes for memory allocation profiling Suren Baghdasaryan
@ 2025-09-15 21:27 ` Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 2/3] alloc_tag: prevent enabling memory profiling if it was shut down Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 3/3] alloc_tag: avoid warnings when freeing non-compound "tail" pages Suren Baghdasaryan
2 siblings, 0 replies; 5+ messages in thread
From: Suren Baghdasaryan @ 2025-09-15 21:27 UTC (permalink / raw)
To: akpm
Cc: kent.overstreet, vbabka, hannes, usamaarif642, shakeel.butt,
00107082, pasha.tatashin, souravpanda, surenb, linux-mm,
linux-kernel
When bulk-freeing an array of pages use release_pages() instead of freeing
them page-by-page.
Suggested-by: Andrew Morton <akpm@linux-foundation.org>
Suggested-by: Usama Arif <usamaarif642@gmail.com>
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Usama Arif <usamaarif642@gmail.com>
---
lib/alloc_tag.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
index e9b33848700a..715315f5d9ba 100644
--- a/lib/alloc_tag.c
+++ b/lib/alloc_tag.c
@@ -438,9 +438,10 @@ static int vm_module_tags_populate(void)
if (nr < more_pages ||
vmap_pages_range(phys_end, phys_end + (nr << PAGE_SHIFT), PAGE_KERNEL,
next_page, PAGE_SHIFT) < 0) {
+ release_pages_arg arg = { .pages = next_page };
+
/* Clean up and error out */
- for (int i = 0; i < nr; i++)
- __free_page(next_page[i]);
+ release_pages(arg, nr);
return -ENOMEM;
}
@@ -682,11 +683,10 @@ static int __init alloc_mod_tags_mem(void)
static void __init free_mod_tags_mem(void)
{
- int i;
+ release_pages_arg arg = { .pages = vm_module_tags->pages };
module_tags.start_addr = 0;
- for (i = 0; i < vm_module_tags->nr_pages; i++)
- __free_page(vm_module_tags->pages[i]);
+ release_pages(arg, vm_module_tags->nr_pages);
kfree(vm_module_tags->pages);
free_vm_area(vm_module_tags);
}
--
2.51.0.384.g4c02a37b29-goog
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 2/3] alloc_tag: prevent enabling memory profiling if it was shut down
2025-09-15 21:27 [PATCH v2 0/3] Minor fixes for memory allocation profiling Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 1/3] alloc_tag: use release_pages() in the cleanup path Suren Baghdasaryan
@ 2025-09-15 21:27 ` Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 3/3] alloc_tag: avoid warnings when freeing non-compound "tail" pages Suren Baghdasaryan
2 siblings, 0 replies; 5+ messages in thread
From: Suren Baghdasaryan @ 2025-09-15 21:27 UTC (permalink / raw)
To: akpm
Cc: kent.overstreet, vbabka, hannes, usamaarif642, shakeel.butt,
00107082, pasha.tatashin, souravpanda, surenb, linux-mm,
linux-kernel
Memory profiling can be shut down due to reasons like a failure during
initialization. When this happens, the user should not be able to
re-enable it. Current sysctrl interface does not handle this properly
and will allow re-enabling memory profiling. Fix this by checking for
this condition during sysctrl write operation.
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Usama Arif <usamaarif642@gmail.com>
---
lib/alloc_tag.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
index 715315f5d9ba..f79217427d81 100644
--- a/lib/alloc_tag.c
+++ b/lib/alloc_tag.c
@@ -766,6 +766,20 @@ struct page_ext_operations page_alloc_tagging_ops = {
EXPORT_SYMBOL(page_alloc_tagging_ops);
#ifdef CONFIG_SYSCTL
+/*
+ * Not using proc_do_static_key() directly to prevent enabling profiling
+ * after it was shut down.
+ */
+static int proc_mem_profiling_handler(const struct ctl_table *table, int write,
+ void *buffer, size_t *lenp, loff_t *ppos)
+{
+ if (!mem_profiling_support && write)
+ return -EINVAL;
+
+ return proc_do_static_key(table, write, buffer, lenp, ppos);
+}
+
+
static struct ctl_table memory_allocation_profiling_sysctls[] = {
{
.procname = "mem_profiling",
@@ -775,7 +789,7 @@ static struct ctl_table memory_allocation_profiling_sysctls[] = {
#else
.mode = 0644,
#endif
- .proc_handler = proc_do_static_key,
+ .proc_handler = proc_mem_profiling_handler,
},
};
--
2.51.0.384.g4c02a37b29-goog
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 3/3] alloc_tag: avoid warnings when freeing non-compound "tail" pages
2025-09-15 21:27 [PATCH v2 0/3] Minor fixes for memory allocation profiling Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 1/3] alloc_tag: use release_pages() in the cleanup path Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 2/3] alloc_tag: prevent enabling memory profiling if it was shut down Suren Baghdasaryan
@ 2025-09-15 21:27 ` Suren Baghdasaryan
2025-09-16 20:47 ` Usama Arif
2 siblings, 1 reply; 5+ messages in thread
From: Suren Baghdasaryan @ 2025-09-15 21:27 UTC (permalink / raw)
To: akpm
Cc: kent.overstreet, vbabka, hannes, usamaarif642, shakeel.butt,
00107082, pasha.tatashin, souravpanda, surenb, linux-mm,
linux-kernel
When freeing "tail" pages of a non-compount high-order page, we properly
subtract the allocation tag counters, however later when these pages are
released, alloc_tag_sub() will issue warnings because tags for these pages
are NULL.
This issue was originally anticipated by Vlastimil in his review [1] and
then recently reported by David.
Prevent warnings by marking the tags empty.
[1] https://lore.kernel.org/all/6db0f0c8-81cb-4d04-9560-ba73d63db4b8@suse.cz/
Suggested-by: David Wang <00107082@163.com>
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
---
mm/page_alloc.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index f54c5ee1e318..2bfab96c207f 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5240,9 +5240,16 @@ static void ___free_pages(struct page *page, unsigned int order,
__free_frozen_pages(page, order, fpi_flags);
else if (!head) {
pgalloc_tag_sub_pages(tag, (1 << order) - 1);
- while (order-- > 0)
+ while (order-- > 0) {
+ /*
+ * The "tail" pages of this non-compound high-order
+ * page will have no code tags, so to avoid warnings
+ * mark them as empty.
+ */
+ clear_page_tag_ref(page + (1 << order));
__free_frozen_pages(page + (1 << order), order,
fpi_flags);
+ }
}
}
--
2.51.0.384.g4c02a37b29-goog
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 3/3] alloc_tag: avoid warnings when freeing non-compound "tail" pages
2025-09-15 21:27 ` [PATCH v2 3/3] alloc_tag: avoid warnings when freeing non-compound "tail" pages Suren Baghdasaryan
@ 2025-09-16 20:47 ` Usama Arif
0 siblings, 0 replies; 5+ messages in thread
From: Usama Arif @ 2025-09-16 20:47 UTC (permalink / raw)
To: Suren Baghdasaryan, akpm
Cc: kent.overstreet, vbabka, hannes, shakeel.butt, 00107082,
pasha.tatashin, souravpanda, linux-mm, linux-kernel
On 15/09/2025 22:27, Suren Baghdasaryan wrote:
> When freeing "tail" pages of a non-compount high-order page, we properly
> subtract the allocation tag counters, however later when these pages are
> released, alloc_tag_sub() will issue warnings because tags for these pages
> are NULL.
> This issue was originally anticipated by Vlastimil in his review [1] and
> then recently reported by David.
> Prevent warnings by marking the tags empty.
>
> [1] https://lore.kernel.org/all/6db0f0c8-81cb-4d04-9560-ba73d63db4b8@suse.cz/
>
> Suggested-by: David Wang <00107082@163.com>
> Signed-off-by: Suren Baghdasaryan <surenb@google.com>
> Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
> ---
> mm/page_alloc.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
Acked-by: Usama Arif <usamaarif642@gmail.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-09-16 20:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-15 21:27 [PATCH v2 0/3] Minor fixes for memory allocation profiling Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 1/3] alloc_tag: use release_pages() in the cleanup path Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 2/3] alloc_tag: prevent enabling memory profiling if it was shut down Suren Baghdasaryan
2025-09-15 21:27 ` [PATCH v2 3/3] alloc_tag: avoid warnings when freeing non-compound "tail" pages Suren Baghdasaryan
2025-09-16 20:47 ` Usama Arif
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox