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