Re: [PATCH] mm/page_alloc: use batch page clearing in kernel_init_pages()
From: Raghavendra K T
Date: Wed Apr 08 2026 - 12:25:25 EST
On 4/8/2026 4:46 PM, Raghavendra K T wrote:
[...]
On 4/8/2026 4:14 PM, Salunke, Hrushikesh wrote:
[Some people who received this message don't often get email from hsalunke@xxxxxxx. Learn why this is important at https://aka.ms/ LearnAboutSenderIdentification ]
mm/page_alloc.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index b1c5430cad4e..178cbebadd50 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1224,8 +1224,23 @@ static void kernel_init_pages(struct page *page, int numpages)
/* s390's use of memset() could override KASAN redzones. */
kasan_disable_current();
- for (i = 0; i < numpages; i++)
- clear_highpage_kasan_tagged(page + i);
+
+ if (!IS_ENABLED(CONFIG_HIGHMEM)) {
+ void *addr = kasan_reset_tag(page_address(page));
+ unsigned int unit = preempt_model_preemptible() ?
+ numpages : PROCESS_PAGES_NON_PREEMPT_BATCH;
+ int count;
+
+ for (i = 0; i < numpages; i += count) {
+ cond_resched();
Just thinking,
Considering that for preemptible kernel/preempt_auto preempt_count()
knows about preemption points to decide where it can preempt,
and
for non_preemptible kernel and voluntary kernel it is safe to do
preemption at PROCESS_PAGES_NON_PREEMPT_BATCH granularity
s/preemption/clear_page/
do we need cond_resched() here ?
Let me know if I am missing something.
I do see Andrew also has same thoughts, (to remove cond_resched() and
sorry for being not crisp :))
But please ensure you test with the below configs to ensure there are no
surprises viz., preempt=none,voluntary,full(/auto).
Regards
- Raghu