Thread (56 messages) 56 messages, 4 authors, 2021-12-16

Re: [PATCH 08/31] kasan, page_alloc: refactor init checks in post_alloc_hook

From: Alexander Potapenko <glider@google.com>
Date: 2021-12-02 16:14:45
Also in: linux-arm-kernel, lkml

On Tue, Nov 30, 2021 at 10:41 PM [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Andrey Konovalov <redacted>

This patch separates code for zeroing memory from the code clearing tags
in post_alloc_hook().

This patch is not useful by itself but makes the simplifications in
the following patches easier to follow.

This patch does no functional changes.

Signed-off-by: Andrey Konovalov <redacted>
---
 mm/page_alloc.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 2ada09a58e4b..0561cdafce36 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2406,19 +2406,21 @@ inline void post_alloc_hook(struct page *page, unsigned int order,
                kasan_alloc_pages(page, order, gfp_flags);
        } else {
                bool init = !want_init_on_free() && want_init_on_alloc(gfp_flags);
+               bool init_tags = init && (gfp_flags & __GFP_ZEROTAGS);

                kasan_unpoison_pages(page, order, init);

-               if (init) {
-                       if (gfp_flags & __GFP_ZEROTAGS) {
-                               int i;
+               if (init_tags) {
+                       int i;

-                               for (i = 0; i < 1 << order; i++)
-                                       tag_clear_highpage(page + i);
-                       } else {
-                               kernel_init_free_pages(page, 1 << order);
-                       }
+                       for (i = 0; i < 1 << order; i++)
+                               tag_clear_highpage(page + i);
+
+                       init = false;
I find this a bit twisted and prone to breakages.
Maybe just check for (init && !init_tags) below?
                }
+
+               if (init)
+                       kernel_init_free_pages(page, 1 << order);
        }

        set_page_owner(page, order, gfp_flags);
--
2.25.1

-- 
Alexander Potapenko
Software Engineer

Google Germany GmbH
Erika-Mann-Straße, 33
80636 München

Geschäftsführer: Paul Manicle, Halimah DeLaine Prado
Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help