From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0B1AC54E67 for ; Wed, 27 Mar 2024 14:38:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 843EA6B00A1; Wed, 27 Mar 2024 10:38:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7F0E16B00A2; Wed, 27 Mar 2024 10:38:11 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 66AD16B00A3; Wed, 27 Mar 2024 10:38:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 433AF6B00A1 for ; Wed, 27 Mar 2024 10:38:11 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 07C8E140556 for ; Wed, 27 Mar 2024 14:38:11 +0000 (UTC) X-FDA: 81943073982.27.3220131 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) by imf21.hostedemail.com (Postfix) with ESMTP id DDAED1C0017 for ; Wed, 27 Mar 2024 14:38:08 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=dabbelt-com.20230601.gappssmtp.com header.s=20230601 header.b=1aSLDKgA; dmarc=none; spf=pass (imf21.hostedemail.com: domain of palmer@dabbelt.com designates 209.85.210.181 as permitted sender) smtp.mailfrom=palmer@dabbelt.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1711550289; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:dkim-signature; bh=62e02ZJiOBiUx9nE4yZd2VXfIcaCZ5n4EKmL0LL89oM=; b=J9sfUbfDcDCARjnkcRz5vpBsU1nxJmqqBdPUwKMKFxIs803rjLbOJmMPLmdGPKGuSaMx7e pRkYaL4ftX8k0KsYYH5kwq0Mc1iMQhgTXJJpe7Jm8V9+qH+EHE3lN1rv8nz6NSz2VFOJfq F4EPUdOJUMVfhHgoRYSg3LpQbxEMbd0= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=dabbelt-com.20230601.gappssmtp.com header.s=20230601 header.b=1aSLDKgA; dmarc=none; spf=pass (imf21.hostedemail.com: domain of palmer@dabbelt.com designates 209.85.210.181 as permitted sender) smtp.mailfrom=palmer@dabbelt.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1711550289; a=rsa-sha256; cv=none; b=p5lCPKJ5+QMHVv0uFtfB6VqNoOv6TQc/xK0B3Z+vyLmk9sXCMjIKoTMRFVOjM1uigTerct 9w+KMDh+ArstFaKnlhz0QZzb/V+cfR8pmSeSI9SIHs8Tuk1DVwvgaiNfLS/nSArBGu+5b/ TIAM21fSQj9WdKrNqLWSzVFKxMy95hw= Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-6ead4093f85so15868b3a.3 for ; Wed, 27 Mar 2024 07:38:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dabbelt-com.20230601.gappssmtp.com; s=20230601; t=1711550288; x=1712155088; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:to:from:cc :in-reply-to:subject:date:from:to:cc:subject:date:message-id :reply-to; bh=62e02ZJiOBiUx9nE4yZd2VXfIcaCZ5n4EKmL0LL89oM=; b=1aSLDKgAw5GEbbRGRYVphvP+mgpcQHqFBWACKzJ09aJo0WQhqa0/3cvBba4fTZ/IZF TwfebIqkTW7seUaLebgX43CtvqBBjS3eah77wqlHGz9rYw2dwxIxVDvN5PyzdSUTy2NX jdgAvz6lpXL21Wa9u+J9r0n4FZGtxB5ikXpy8SI6TkFHkC/FGj4vh/lLqbhxvAiebmTU g1u9knH9zBBap6t8HIR/Cpvq/SQ7s1amuiIwLyjESO5bBXDygmE0yqngp2qiqcZh1jIW 6GviUHGvpvggrp2jCL8S3K1PVxd4EJwCf7emPfwCDwM72aHvBgvQtbrhQDdoGDS2nuA3 DYDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711550288; x=1712155088; h=content-transfer-encoding:mime-version:message-id:to:from:cc :in-reply-to:subject:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=62e02ZJiOBiUx9nE4yZd2VXfIcaCZ5n4EKmL0LL89oM=; b=WFTnwJzm7X6/EzZsoukKHb5L86Tza7b6swn86b1U5OXA0XcMomhg3IElvj1UH8ezu1 Q3mgqvs93JwXRuXnf3Bf42wj1yrA2zFhqeo0i9mXtDy2TP1bDZTn+30OLvy6/LpCRvE6 FkJrHcj0HRT4DMlwN328EjFzvQdzx04hD+fY0yp9pQ4k8SWJQMrrYQFAPOWRhIge5dwS Xu5NfB3uiZwKXWMBljVKMQ3f+Pzpja/qkplM5BQalQOSHMnCL7wUa45copXMvR5chMJ/ dEJJvMNAxhwfCWAmUkP6Coe2Lzkma8Rsok0pj71/RMqvOcKJwyFepxidPqrz1X60fEEm nmvw== X-Forwarded-Encrypted: i=1; AJvYcCU0yqqNQ1SOqeZvYhIhToQ0bkjuqMFTXWbrimCBP1Q+BED6xD60/ihyRGkQTq7+LdYoPJIgxlFHHhyRMc6f1XI633o= X-Gm-Message-State: AOJu0YwZq/Alezb8ct6Bs7Hp7RuUnm3aeaC3o9TJlfK6k6qrfhkumhCS nqkoRJn5J/02pLY/LuaQBnVliuG9t6v4+j5AYZAXBcFmeW+kpukP51bdHh+5Jis= X-Google-Smtp-Source: AGHT+IFyCEdH6JyzL0GlGOQ3Vv7tpqbVcDK1otySOtCn4QIbbD69ta+fqdT57hyTuYAu4DWmtJ/GZA== X-Received: by 2002:a05:6a00:14d3:b0:6ea:acbe:517a with SMTP id w19-20020a056a0014d300b006eaacbe517amr1635574pfu.16.1711550287270; Wed, 27 Mar 2024 07:38:07 -0700 (PDT) Received: from localhost ([192.184.165.199]) by smtp.gmail.com with ESMTPSA id c14-20020a056a000ace00b006eab60bca64sm4144777pfl.177.2024.03.27.07.38.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Mar 2024 07:38:06 -0700 (PDT) Date: Wed, 27 Mar 2024 07:38:06 -0700 (PDT) X-Google-Original-Date: Wed, 27 Mar 2024 07:38:05 PDT (-0700) Subject: Re: [PATCH v2 2/5] arm64, powerpc, riscv, s390, x86: ptdump: Refactor CONFIG_DEBUG_WX In-Reply-To: CC: akpm@linux-foundation.org, keescook@chromium.org, christophe.leroy@csgroup.eu, linux@armlinux.org.uk, Catalin Marinas , Will Deacon , mpe@ellerman.id.au, npiggin@gmail.com, aneesh.kumar@kernel.org, naveen.n.rao@linux.ibm.com, Paul Walmsley , aou@eecs.berkeley.edu, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, borntraeger@linux.ibm.com, svens@linux.ibm.com, gerald.schaefer@linux.ibm.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, luto@kernel.org, peterz@infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-mm@kvack.org, steven.price@arm.com, tranmanphong@gmail.com, Mark Rutland , greg@kroah.com, alexghiti@rivosinc.com From: Palmer Dabbelt To: christophe.leroy@csgroup.eu Message-ID: Mime-Version: 1.0 (MHng) Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: DDAED1C0017 X-Stat-Signature: y3qcdguu1es7zip9gq8dncocbeukr35n X-HE-Tag: 1711550288-543719 X-HE-Meta: U2FsdGVkX1+oUbVUFbQAaqNJhSie2V1ipgoYnD09OF6xyKdNkXHcoud8Pjl3uMs8GUJRUNohbDXYsNJZJoS78uLtBiyWCpYPYOAZQ7qqTRgOFuQTIlZJoZW2LM3C0Zo0YoD9qshBKF17Nk42i/72STyOf30pSS9MQVH0TRFlsA2aRTcn2/U3ZD8LD9mNwTEAwVwYdokwMLGOTKfQ79NQ7dW4S5gROd99T3EaUyyMnEGrZeE2inyO1XTm71xmLD+7Kv1ILPVBbPKpbWXJIHO/YD7oEbkYZbPJCEklGmHG8LDDt8wHoT4+2eJpVXW6xiAZLMsH4HgiMts4aZ5fbtMOoBipOmgkwtlMiutQQwg6NCjgUW38bOcgST0uKfaQr3MP01UShX942UnlYi7EOHi6obhIAZWDO1JPe1CALWtwtBOL90IwB0IH+xYni0IAdSBHihEP6dKQ5Tu2j7ZMVy+axPtuaZJXHx7393DOEeKrzKD7f102sNxLD4nARV25XsLwBNAsFHKqX0SA+ZQnC48Wg183e/f3OUTX/WP1P8VbOUtKFwjZHK0D56oL9wCUJBLXDxxKUWHNVw7Xrdg6lSmo090KSFqqd0H15wOkwkrsmVSDd5rTuiYC+Jbmq1EW6yOZZQ2zMh09lgbPu1TTaa10pAlnsalPe7r5KgmYsDuVeiV7lpco0OVhZZfCR7pQof5MEjw5f5I9auuhrXeZRq6jgrEDAHKZnE7SewM0mZkkPjs1F8uGfJMlmjVupAvlUIY5gXgbGwLS0yyeZPbfCcHbVEYsjOs7CEV6ve4a/THo66zLOTgc/TKXfdrCp5xtrRGCBdOzwLHaqUVVLuzeBwZT6MtA8DeBXQYiX8S6gLZnfvE7ZBJkyHhcAaJrhUghvLa1RyhOtkRRN36eFtNDrHBllSi7v7u5idWU4Ju58PTJ+ArUQMwAmgYWxQTQDvus+uM4L54h+wC18dJQkclf65r NLRX1i2L vZblXdyCb6t3z/NHMQx36l2C4ldmN450wkLDz72nYIrA5cWVr6HZE9LDvaDzczLwkSiKFzZ8WLclMTaqrC5Ux+RlZlCPM+dRpRxjgBBYYPNXrw0J8nsxBuzY+W7hlkE78fAco/g1R5Ii+bdleepbiEh7MoxfgtBzTMXtp1rsnt1MYWoqk8Jkv8//k+NSImC3EvlIJDSL6j0jaCDQacCVThi1dtQmgqqTbhT17vWrz+Lzaigl+AmqyH0GwFMQv+SfaBncrKGKonWUr5V8ae5X0GrMkUr5ic37DbY2xTXaa5Qmy6TlMOOBR2xcl00hgGYZFp93ITT9MUw8Jacs/N2g3G2UAPWpXrZ23gYCQ8nuQ2TCiMZNZFfW7CEwQwwnQ73AgPPtUBlM0X91lFcCRbe6ob1iRn230XqSvJ5JoHAaLgoAssF47yweHubAR9UxmTAvdoezFiCU71ZXwpHlnqXn7hJ30QYaBDvG3FoqzTj5B0lMMtMCnWtZKceB/FVShqPpUe1ZuEz9VdZrymwhvcZkk612sRpRlUsx+5h1BiRE0YHaei26FGUp9ei4mGTEbfNYeOf0gYwcTdISzjVk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, 30 Jan 2024 02:34:33 PST (-0800), christophe.leroy@csgroup.eu wrote: > All architectures using the core ptdump functionality also implement > CONFIG_DEBUG_WX, and they all do it more or less the same way, with a > function called debug_checkwx() that is called by mark_rodata_ro(), > which is a substitute to ptdump_check_wx() when CONFIG_DEBUG_WX is > set and a no-op otherwise. > > Refactor by centraly defining debug_checkwx() in linux/ptdump.h and > call debug_checkwx() immediately after calling mark_rodata_ro() > instead of calling it at the end of every mark_rodata_ro(). > > On x86_32, mark_rodata_ro() first checks __supported_pte_mask has > _PAGE_NX before calling debug_checkwx(). Now the check is inside the > callee ptdump_walk_pgd_level_checkwx(). > > On powerpc_64, mark_rodata_ro() bails out early before calling > ptdump_check_wx() when the MMU doesn't have KERNEL_RO feature. The > check is now also done in ptdump_check_wx() as it is called outside > mark_rodata_ro(). > > Signed-off-by: Christophe Leroy > Reviewed-by: Alexandre Ghiti > --- > v2: For x86 change macro ptdump_check_wx() to ptdump_check_wx > --- > arch/arm64/include/asm/ptdump.h | 7 ------- > arch/arm64/mm/mmu.c | 2 -- > arch/powerpc/mm/mmu_decl.h | 6 ------ > arch/powerpc/mm/pgtable_32.c | 4 ---- > arch/powerpc/mm/pgtable_64.c | 3 --- > arch/powerpc/mm/ptdump/ptdump.c | 3 +++ > arch/riscv/include/asm/ptdump.h | 22 ---------------------- > arch/riscv/mm/init.c | 3 --- > arch/riscv/mm/ptdump.c | 1 - > arch/s390/include/asm/ptdump.h | 14 -------------- > arch/s390/mm/dump_pagetables.c | 1 - > arch/s390/mm/init.c | 2 -- > arch/x86/include/asm/pgtable.h | 3 +-- > arch/x86/mm/dump_pagetables.c | 3 +++ > arch/x86/mm/init_32.c | 2 -- > arch/x86/mm/init_64.c | 2 -- > include/linux/ptdump.h | 7 +++++++ > init/main.c | 2 ++ > 18 files changed, 16 insertions(+), 71 deletions(-) > delete mode 100644 arch/riscv/include/asm/ptdump.h > delete mode 100644 arch/s390/include/asm/ptdump.h > > diff --git a/arch/arm64/include/asm/ptdump.h b/arch/arm64/include/asm/ptdump.h > index 581caac525b0..5b1701c76d1c 100644 > --- a/arch/arm64/include/asm/ptdump.h > +++ b/arch/arm64/include/asm/ptdump.h > @@ -29,13 +29,6 @@ void __init ptdump_debugfs_register(struct ptdump_info *info, const char *name); > static inline void ptdump_debugfs_register(struct ptdump_info *info, > const char *name) { } > #endif > -void ptdump_check_wx(void); > #endif /* CONFIG_PTDUMP_CORE */ > > -#ifdef CONFIG_DEBUG_WX > -#define debug_checkwx() ptdump_check_wx() > -#else > -#define debug_checkwx() do { } while (0) > -#endif > - > #endif /* __ASM_PTDUMP_H */ > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > index 1ac7467d34c9..3a27d887f7dd 100644 > --- a/arch/arm64/mm/mmu.c > +++ b/arch/arm64/mm/mmu.c > @@ -632,8 +632,6 @@ void mark_rodata_ro(void) > section_size = (unsigned long)__init_begin - (unsigned long)__start_rodata; > update_mapping_prot(__pa_symbol(__start_rodata), (unsigned long)__start_rodata, > section_size, PAGE_KERNEL_RO); > - > - debug_checkwx(); > } > > static void __init map_kernel_segment(pgd_t *pgdp, void *va_start, void *va_end, > diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h > index 72341b9fb552..90dcc2844056 100644 > --- a/arch/powerpc/mm/mmu_decl.h > +++ b/arch/powerpc/mm/mmu_decl.h > @@ -171,12 +171,6 @@ static inline void mmu_mark_rodata_ro(void) { } > void __init mmu_mapin_immr(void); > #endif > > -#ifdef CONFIG_DEBUG_WX > -void ptdump_check_wx(void); > -#else > -static inline void ptdump_check_wx(void) { } > -#endif > - > static inline bool debug_pagealloc_enabled_or_kfence(void) > { > return IS_ENABLED(CONFIG_KFENCE) || debug_pagealloc_enabled(); > diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c > index 5c02fd08d61e..12498017da8e 100644 > --- a/arch/powerpc/mm/pgtable_32.c > +++ b/arch/powerpc/mm/pgtable_32.c > @@ -153,7 +153,6 @@ void mark_rodata_ro(void) > > if (v_block_mapped((unsigned long)_stext + 1)) { > mmu_mark_rodata_ro(); > - ptdump_check_wx(); > return; > } > > @@ -166,9 +165,6 @@ void mark_rodata_ro(void) > PFN_DOWN((unsigned long)_stext); > > set_memory_ro((unsigned long)_stext, numpages); > - > - // mark_initmem_nx() should have already run by now > - ptdump_check_wx(); > } > #endif > > diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c > index 5ac1fd30341b..1b366526f4f2 100644 > --- a/arch/powerpc/mm/pgtable_64.c > +++ b/arch/powerpc/mm/pgtable_64.c > @@ -150,9 +150,6 @@ void mark_rodata_ro(void) > radix__mark_rodata_ro(); > else > hash__mark_rodata_ro(); > - > - // mark_initmem_nx() should have already run by now > - ptdump_check_wx(); > } > > void mark_initmem_nx(void) > diff --git a/arch/powerpc/mm/ptdump/ptdump.c b/arch/powerpc/mm/ptdump/ptdump.c > index 2313053fe679..620d4917ebe8 100644 > --- a/arch/powerpc/mm/ptdump/ptdump.c > +++ b/arch/powerpc/mm/ptdump/ptdump.c > @@ -343,6 +343,9 @@ void ptdump_check_wx(void) > } > }; > > + if (IS_ENABLED(CONFIG_PPC_BOOK3S_64) && !mmu_has_feature(MMU_FTR_KERNEL_RO)) > + return; > + > ptdump_walk_pgd(&st.ptdump, &init_mm, NULL); > > if (st.wx_pages) > diff --git a/arch/riscv/include/asm/ptdump.h b/arch/riscv/include/asm/ptdump.h > deleted file mode 100644 > index 3c9ea6dd5af7..000000000000 > --- a/arch/riscv/include/asm/ptdump.h > +++ /dev/null > @@ -1,22 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 */ > -/* > - * Copyright (C) 2019 SiFive > - */ > - > -#ifndef _ASM_RISCV_PTDUMP_H > -#define _ASM_RISCV_PTDUMP_H > - > -void ptdump_check_wx(void); > - > -#ifdef CONFIG_DEBUG_WX > -static inline void debug_checkwx(void) > -{ > - ptdump_check_wx(); > -} > -#else > -static inline void debug_checkwx(void) > -{ > -} > -#endif > - > -#endif /* _ASM_RISCV_PTDUMP_H */ > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > index 32cad6a65ccd..c5c69f38d11e 100644 > --- a/arch/riscv/mm/init.c > +++ b/arch/riscv/mm/init.c > @@ -29,7 +29,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -723,8 +722,6 @@ void mark_rodata_ro(void) > if (IS_ENABLED(CONFIG_64BIT)) > set_kernel_memory(lm_alias(__start_rodata), lm_alias(_data), > set_memory_ro); > - > - debug_checkwx(); > } > #else > static __init pgprot_t pgprot_from_va(uintptr_t va) > diff --git a/arch/riscv/mm/ptdump.c b/arch/riscv/mm/ptdump.c > index 657c27bc07a7..075265603313 100644 > --- a/arch/riscv/mm/ptdump.c > +++ b/arch/riscv/mm/ptdump.c > @@ -9,7 +9,6 @@ > #include > #include > > -#include > #include > #include > > diff --git a/arch/s390/include/asm/ptdump.h b/arch/s390/include/asm/ptdump.h > deleted file mode 100644 > index f960b2896606..000000000000 > --- a/arch/s390/include/asm/ptdump.h > +++ /dev/null > @@ -1,14 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 */ > - > -#ifndef _ASM_S390_PTDUMP_H > -#define _ASM_S390_PTDUMP_H > - > -void ptdump_check_wx(void); > - > -static inline void debug_checkwx(void) > -{ > - if (IS_ENABLED(CONFIG_DEBUG_WX)) > - ptdump_check_wx(); > -} > - > -#endif /* _ASM_S390_PTDUMP_H */ > diff --git a/arch/s390/mm/dump_pagetables.c b/arch/s390/mm/dump_pagetables.c > index d37a8f607b71..8dcb4e0c71bd 100644 > --- a/arch/s390/mm/dump_pagetables.c > +++ b/arch/s390/mm/dump_pagetables.c > @@ -6,7 +6,6 @@ > #include > #include > #include > -#include > #include > #include > #include > diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c > index 43e612bc2bcd..d2e5eff9d1de 100644 > --- a/arch/s390/mm/init.c > +++ b/arch/s390/mm/init.c > @@ -37,7 +37,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -109,7 +108,6 @@ void mark_rodata_ro(void) > > __set_memory_ro(__start_ro_after_init, __end_ro_after_init); > pr_info("Write protected read-only-after-init data: %luk\n", size >> 10); > - debug_checkwx(); > } > > int set_memory_encrypted(unsigned long vaddr, int numpages) > diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h > index 9d077bca6a10..6c979028e521 100644 > --- a/arch/x86/include/asm/pgtable.h > +++ b/arch/x86/include/asm/pgtable.h > @@ -32,6 +32,7 @@ void ptdump_walk_pgd_level(struct seq_file *m, struct mm_struct *mm); > void ptdump_walk_pgd_level_debugfs(struct seq_file *m, struct mm_struct *mm, > bool user); > void ptdump_walk_pgd_level_checkwx(void); > +#define ptdump_check_wx ptdump_walk_pgd_level_checkwx > void ptdump_walk_user_pgd_level_checkwx(void); > > /* > @@ -41,10 +42,8 @@ void ptdump_walk_user_pgd_level_checkwx(void); > #define pgprot_decrypted(prot) __pgprot(cc_mkdec(pgprot_val(prot))) > > #ifdef CONFIG_DEBUG_WX > -#define debug_checkwx() ptdump_walk_pgd_level_checkwx() > #define debug_checkwx_user() ptdump_walk_user_pgd_level_checkwx() > #else > -#define debug_checkwx() do { } while (0) > #define debug_checkwx_user() do { } while (0) > #endif > > diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c > index e1b599ecbbc2..0008524eebe9 100644 > --- a/arch/x86/mm/dump_pagetables.c > +++ b/arch/x86/mm/dump_pagetables.c > @@ -433,6 +433,9 @@ void ptdump_walk_user_pgd_level_checkwx(void) > > void ptdump_walk_pgd_level_checkwx(void) > { > + if (!(__supported_pte_mask & _PAGE_NX)) > + return; > + > ptdump_walk_pgd_level_core(NULL, &init_mm, INIT_PGD, true, false); > } > > diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c > index b63403d7179d..5c736b707cae 100644 > --- a/arch/x86/mm/init_32.c > +++ b/arch/x86/mm/init_32.c > @@ -800,6 +800,4 @@ void mark_rodata_ro(void) > set_pages_ro(virt_to_page(start), size >> PAGE_SHIFT); > #endif > mark_nxdata_nx(); > - if (__supported_pte_mask & _PAGE_NX) > - debug_checkwx(); > } > diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c > index a0dffaca6d2b..ebdbcae48011 100644 > --- a/arch/x86/mm/init_64.c > +++ b/arch/x86/mm/init_64.c > @@ -1412,8 +1412,6 @@ void mark_rodata_ro(void) > (void *)text_end, (void *)rodata_start); > free_kernel_image_pages("unused kernel image (rodata/data gap)", > (void *)rodata_end, (void *)_sdata); > - > - debug_checkwx(); > } > > /* > diff --git a/include/linux/ptdump.h b/include/linux/ptdump.h > index 2a3a95586425..c10513739bf9 100644 > --- a/include/linux/ptdump.h > +++ b/include/linux/ptdump.h > @@ -19,5 +19,12 @@ struct ptdump_state { > }; > > void ptdump_walk_pgd(struct ptdump_state *st, struct mm_struct *mm, pgd_t *pgd); > +void ptdump_check_wx(void); > + > +static inline void debug_checkwx(void) > +{ > + if (IS_ENABLED(CONFIG_DEBUG_WX)) > + ptdump_check_wx(); > +} > > #endif /* _LINUX_PTDUMP_H */ > diff --git a/init/main.c b/init/main.c > index e24b0780fdff..749a9f8d2c9b 100644 > --- a/init/main.c > +++ b/init/main.c > @@ -99,6 +99,7 @@ > #include > #include > #include > +#include > #include > > #include > @@ -1408,6 +1409,7 @@ static void mark_readonly(void) > */ > rcu_barrier(); > mark_rodata_ro(); > + debug_checkwx(); > rodata_test(); > } else > pr_info("Kernel memory protection disabled.\n"); Acked-by: Palmer Dabbelt # RISC-V