From nobody Wed Dec 17 09:13:13 2025 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10FC9C54F39 for ; Tue, 23 Aug 2022 10:53:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357068AbiHWKw5 (ORCPT ); Tue, 23 Aug 2022 06:52:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354826AbiHWKpU (ORCPT ); Tue, 23 Aug 2022 06:45:20 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B6F727CD3; Tue, 23 Aug 2022 02:10:59 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 07AB060DB4; Tue, 23 Aug 2022 09:10:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0E003C433D6; Tue, 23 Aug 2022 09:10:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1661245858; bh=DbugGScHIkvIP6Pd4hT6Ur37vKutWJFJ6tLVmCrkrCs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UTd+VMp21Tf9tsI7FW9OGqi93UkB6qfIQ0cr9X3+IdmO9P8ugc0DyQXCNnyx4YYUb Vd9Gue25bE3T8pkaSBtYkVf0pRJafjdin6azq8c/p4V+Xo3e6rkI7KXPP6mF7joa3Y EjZNsOTuwp0e5dszlypwz4YZyrmXYKXtcRnEGNtg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Aneesh Kumar K.V" , Christophe Leroy , Michael Ellerman Subject: [PATCH 4.19 213/287] powerpc/mm: Split dump_pagelinuxtables flag_array table Date: Tue, 23 Aug 2022 10:26:22 +0200 Message-Id: <20220823080108.114894774@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220823080100.268827165@linuxfoundation.org> References: <20220823080100.268827165@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Christophe Leroy commit 97026b5a5ac26541b3d294146f5c941491a9e609 upstream. To reduce the complexity of flag_array, and allow the removal of default 0 value of non existing flags, lets have one flag_array table for each platform family with only the really existing flags. Reviewed-by: Aneesh Kumar K.V Signed-off-by: Christophe Leroy Signed-off-by: Michael Ellerman Signed-off-by: Greg Kroah-Hartman --- arch/powerpc/mm/Makefile | 7 + arch/powerpc/mm/dump_linuxpagetables-8xx.c | 82 ++++++++++++ arch/powerpc/mm/dump_linuxpagetables-book3s64.c | 115 +++++++++++++++++ arch/powerpc/mm/dump_linuxpagetables-generic.c | 82 ++++++++++++ arch/powerpc/mm/dump_linuxpagetables.c | 155 -------------------= ----- arch/powerpc/mm/dump_linuxpagetables.h | 19 ++ 6 files changed, 307 insertions(+), 153 deletions(-) create mode 100644 arch/powerpc/mm/dump_linuxpagetables-8xx.c create mode 100644 arch/powerpc/mm/dump_linuxpagetables-book3s64.c create mode 100644 arch/powerpc/mm/dump_linuxpagetables-generic.c create mode 100644 arch/powerpc/mm/dump_linuxpagetables.h --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile @@ -43,5 +43,12 @@ obj-$(CONFIG_HIGHMEM) +=3D highmem.o obj-$(CONFIG_PPC_COPRO_BASE) +=3D copro_fault.o obj-$(CONFIG_SPAPR_TCE_IOMMU) +=3D mmu_context_iommu.o obj-$(CONFIG_PPC_PTDUMP) +=3D dump_linuxpagetables.o +ifdef CONFIG_PPC_PTDUMP +obj-$(CONFIG_4xx) +=3D dump_linuxpagetables-generic.o +obj-$(CONFIG_PPC_8xx) +=3D dump_linuxpagetables-8xx.o +obj-$(CONFIG_PPC_BOOK3E_MMU) +=3D dump_linuxpagetables-generic.o +obj-$(CONFIG_PPC_BOOK3S_32) +=3D dump_linuxpagetables-generic.o +obj-$(CONFIG_PPC_BOOK3S_64) +=3D dump_linuxpagetables-book3s64.o +endif obj-$(CONFIG_PPC_HTDUMP) +=3D dump_hashpagetable.o obj-$(CONFIG_PPC_MEM_KEYS) +=3D pkeys.o --- /dev/null +++ b/arch/powerpc/mm/dump_linuxpagetables-8xx.c @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * From split of dump_linuxpagetables.c + * Copyright 2016, Rashmica Gupta, IBM Corp. + * + */ +#include +#include + +#include "dump_linuxpagetables.h" + +static const struct flag_info flag_array[] =3D { + { + .mask =3D _PAGE_PRIVILEGED, + .val =3D 0, + .set =3D "user", + .clear =3D " ", + }, { + .mask =3D _PAGE_RO | _PAGE_NA, + .val =3D 0, + .set =3D "rw", + }, { + .mask =3D _PAGE_RO | _PAGE_NA, + .val =3D _PAGE_RO, + .set =3D "r ", + }, { + .mask =3D _PAGE_RO | _PAGE_NA, + .val =3D _PAGE_NA, + .set =3D " ", + }, { + .mask =3D _PAGE_EXEC, + .val =3D _PAGE_EXEC, + .set =3D " X ", + .clear =3D " ", + }, { + .mask =3D _PAGE_PRESENT, + .val =3D _PAGE_PRESENT, + .set =3D "present", + .clear =3D " ", + }, { + .mask =3D _PAGE_GUARDED, + .val =3D _PAGE_GUARDED, + .set =3D "guarded", + .clear =3D " ", + }, { + .mask =3D _PAGE_DIRTY, + .val =3D _PAGE_DIRTY, + .set =3D "dirty", + .clear =3D " ", + }, { + .mask =3D _PAGE_ACCESSED, + .val =3D _PAGE_ACCESSED, + .set =3D "accessed", + .clear =3D " ", + }, { + .mask =3D _PAGE_NO_CACHE, + .val =3D _PAGE_NO_CACHE, + .set =3D "no cache", + .clear =3D " ", + }, { + .mask =3D _PAGE_SPECIAL, + .val =3D _PAGE_SPECIAL, + .set =3D "special", + } +}; + +struct pgtable_level pg_level[5] =3D { + { + }, { /* pgd */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pud */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pmd */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pte */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, +}; --- /dev/null +++ b/arch/powerpc/mm/dump_linuxpagetables-book3s64.c @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * From split of dump_linuxpagetables.c + * Copyright 2016, Rashmica Gupta, IBM Corp. + * + */ +#include +#include + +#include "dump_linuxpagetables.h" + +static const struct flag_info flag_array[] =3D { + { + .mask =3D _PAGE_PRIVILEGED, + .val =3D 0, + .set =3D "user", + .clear =3D " ", + }, { + .mask =3D _PAGE_READ, + .val =3D _PAGE_READ, + .set =3D "r", + .clear =3D " ", + }, { + .mask =3D _PAGE_WRITE, + .val =3D _PAGE_WRITE, + .set =3D "w", + .clear =3D " ", + }, { + .mask =3D _PAGE_EXEC, + .val =3D _PAGE_EXEC, + .set =3D " X ", + .clear =3D " ", + }, { + .mask =3D _PAGE_PTE, + .val =3D _PAGE_PTE, + .set =3D "pte", + .clear =3D " ", + }, { + .mask =3D _PAGE_PRESENT, + .val =3D _PAGE_PRESENT, + .set =3D "present", + .clear =3D " ", + }, { + .mask =3D H_PAGE_HASHPTE, + .val =3D H_PAGE_HASHPTE, + .set =3D "hpte", + .clear =3D " ", + }, { + .mask =3D _PAGE_DIRTY, + .val =3D _PAGE_DIRTY, + .set =3D "dirty", + .clear =3D " ", + }, { + .mask =3D _PAGE_ACCESSED, + .val =3D _PAGE_ACCESSED, + .set =3D "accessed", + .clear =3D " ", + }, { + .mask =3D _PAGE_NON_IDEMPOTENT, + .val =3D _PAGE_NON_IDEMPOTENT, + .set =3D "non-idempotent", + .clear =3D " ", + }, { + .mask =3D _PAGE_TOLERANT, + .val =3D _PAGE_TOLERANT, + .set =3D "tolerant", + .clear =3D " ", + }, { + .mask =3D H_PAGE_BUSY, + .val =3D H_PAGE_BUSY, + .set =3D "busy", + }, { +#ifdef CONFIG_PPC_64K_PAGES + .mask =3D H_PAGE_COMBO, + .val =3D H_PAGE_COMBO, + .set =3D "combo", + }, { + .mask =3D H_PAGE_4K_PFN, + .val =3D H_PAGE_4K_PFN, + .set =3D "4K_pfn", + }, { +#else /* CONFIG_PPC_64K_PAGES */ + .mask =3D H_PAGE_F_GIX, + .val =3D H_PAGE_F_GIX, + .set =3D "f_gix", + .is_val =3D true, + .shift =3D H_PAGE_F_GIX_SHIFT, + }, { + .mask =3D H_PAGE_F_SECOND, + .val =3D H_PAGE_F_SECOND, + .set =3D "f_second", + }, { +#endif /* CONFIG_PPC_64K_PAGES */ + .mask =3D _PAGE_SPECIAL, + .val =3D _PAGE_SPECIAL, + .set =3D "special", + } +}; + +struct pgtable_level pg_level[5] =3D { + { + }, { /* pgd */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pud */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pmd */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pte */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, +}; --- /dev/null +++ b/arch/powerpc/mm/dump_linuxpagetables-generic.c @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * From split of dump_linuxpagetables.c + * Copyright 2016, Rashmica Gupta, IBM Corp. + * + */ +#include +#include + +#include "dump_linuxpagetables.h" + +static const struct flag_info flag_array[] =3D { + { + .mask =3D _PAGE_USER, + .val =3D _PAGE_USER, + .set =3D "user", + .clear =3D " ", + }, { + .mask =3D _PAGE_RW, + .val =3D _PAGE_RW, + .set =3D "rw", + .clear =3D "r ", + }, { +#ifndef CONFIG_PPC_BOOK3S_32 + .mask =3D _PAGE_EXEC, + .val =3D _PAGE_EXEC, + .set =3D " X ", + .clear =3D " ", + }, { +#endif + .mask =3D _PAGE_PRESENT, + .val =3D _PAGE_PRESENT, + .set =3D "present", + .clear =3D " ", + }, { + .mask =3D _PAGE_GUARDED, + .val =3D _PAGE_GUARDED, + .set =3D "guarded", + .clear =3D " ", + }, { + .mask =3D _PAGE_DIRTY, + .val =3D _PAGE_DIRTY, + .set =3D "dirty", + .clear =3D " ", + }, { + .mask =3D _PAGE_ACCESSED, + .val =3D _PAGE_ACCESSED, + .set =3D "accessed", + .clear =3D " ", + }, { + .mask =3D _PAGE_WRITETHRU, + .val =3D _PAGE_WRITETHRU, + .set =3D "write through", + .clear =3D " ", + }, { + .mask =3D _PAGE_NO_CACHE, + .val =3D _PAGE_NO_CACHE, + .set =3D "no cache", + .clear =3D " ", + }, { + .mask =3D _PAGE_SPECIAL, + .val =3D _PAGE_SPECIAL, + .set =3D "special", + } +}; + +struct pgtable_level pg_level[5] =3D { + { + }, { /* pgd */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pud */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pmd */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, { /* pte */ + .flag =3D flag_array, + .num =3D ARRAY_SIZE(flag_array), + }, +}; --- a/arch/powerpc/mm/dump_linuxpagetables.c +++ b/arch/powerpc/mm/dump_linuxpagetables.c @@ -28,6 +28,8 @@ #include #include =20 +#include "dump_linuxpagetables.h" + #ifdef CONFIG_PPC32 #define KERN_VIRT_START 0 #endif @@ -102,159 +104,6 @@ static struct addr_marker address_marker { -1, NULL }, }; =20 -struct flag_info { - u64 mask; - u64 val; - const char *set; - const char *clear; - bool is_val; - int shift; -}; - -static const struct flag_info flag_array[] =3D { - { - .mask =3D _PAGE_USER | _PAGE_PRIVILEGED, - .val =3D _PAGE_USER, - .set =3D "user", - .clear =3D " ", - }, { - .mask =3D _PAGE_RW | _PAGE_RO | _PAGE_NA, - .val =3D _PAGE_RW, - .set =3D "rw", - }, { - .mask =3D _PAGE_RW | _PAGE_RO | _PAGE_NA, - .val =3D _PAGE_RO, - .set =3D "ro", - }, { -#if _PAGE_NA !=3D 0 - .mask =3D _PAGE_RW | _PAGE_RO | _PAGE_NA, - .val =3D _PAGE_RO, - .set =3D "na", - }, { -#endif - .mask =3D _PAGE_EXEC, - .val =3D _PAGE_EXEC, - .set =3D " X ", - .clear =3D " ", - }, { - .mask =3D _PAGE_PTE, - .val =3D _PAGE_PTE, - .set =3D "pte", - .clear =3D " ", - }, { - .mask =3D _PAGE_PRESENT, - .val =3D _PAGE_PRESENT, - .set =3D "present", - .clear =3D " ", - }, { -#ifdef CONFIG_PPC_BOOK3S_64 - .mask =3D H_PAGE_HASHPTE, - .val =3D H_PAGE_HASHPTE, -#else - .mask =3D _PAGE_HASHPTE, - .val =3D _PAGE_HASHPTE, -#endif - .set =3D "hpte", - .clear =3D " ", - }, { -#ifndef CONFIG_PPC_BOOK3S_64 - .mask =3D _PAGE_GUARDED, - .val =3D _PAGE_GUARDED, - .set =3D "guarded", - .clear =3D " ", - }, { -#endif - .mask =3D _PAGE_DIRTY, - .val =3D _PAGE_DIRTY, - .set =3D "dirty", - .clear =3D " ", - }, { - .mask =3D _PAGE_ACCESSED, - .val =3D _PAGE_ACCESSED, - .set =3D "accessed", - .clear =3D " ", - }, { -#ifndef CONFIG_PPC_BOOK3S_64 - .mask =3D _PAGE_WRITETHRU, - .val =3D _PAGE_WRITETHRU, - .set =3D "write through", - .clear =3D " ", - }, { -#endif -#ifndef CONFIG_PPC_BOOK3S_64 - .mask =3D _PAGE_NO_CACHE, - .val =3D _PAGE_NO_CACHE, - .set =3D "no cache", - .clear =3D " ", - }, { -#else - .mask =3D _PAGE_NON_IDEMPOTENT, - .val =3D _PAGE_NON_IDEMPOTENT, - .set =3D "non-idempotent", - .clear =3D " ", - }, { - .mask =3D _PAGE_TOLERANT, - .val =3D _PAGE_TOLERANT, - .set =3D "tolerant", - .clear =3D " ", - }, { -#endif -#ifdef CONFIG_PPC_BOOK3S_64 - .mask =3D H_PAGE_BUSY, - .val =3D H_PAGE_BUSY, - .set =3D "busy", - }, { -#ifdef CONFIG_PPC_64K_PAGES - .mask =3D H_PAGE_COMBO, - .val =3D H_PAGE_COMBO, - .set =3D "combo", - }, { - .mask =3D H_PAGE_4K_PFN, - .val =3D H_PAGE_4K_PFN, - .set =3D "4K_pfn", - }, { -#else /* CONFIG_PPC_64K_PAGES */ - .mask =3D H_PAGE_F_GIX, - .val =3D H_PAGE_F_GIX, - .set =3D "f_gix", - .is_val =3D true, - .shift =3D H_PAGE_F_GIX_SHIFT, - }, { - .mask =3D H_PAGE_F_SECOND, - .val =3D H_PAGE_F_SECOND, - .set =3D "f_second", - }, { -#endif /* CONFIG_PPC_64K_PAGES */ -#endif - .mask =3D _PAGE_SPECIAL, - .val =3D _PAGE_SPECIAL, - .set =3D "special", - } -}; - -struct pgtable_level { - const struct flag_info *flag; - size_t num; - u64 mask; -}; - -static struct pgtable_level pg_level[] =3D { - { - }, { /* pgd */ - .flag =3D flag_array, - .num =3D ARRAY_SIZE(flag_array), - }, { /* pud */ - .flag =3D flag_array, - .num =3D ARRAY_SIZE(flag_array), - }, { /* pmd */ - .flag =3D flag_array, - .num =3D ARRAY_SIZE(flag_array), - }, { /* pte */ - .flag =3D flag_array, - .num =3D ARRAY_SIZE(flag_array), - }, -}; - static void dump_flag_info(struct pg_state *st, const struct flag_info *flag, u64 pte, int num) { --- /dev/null +++ b/arch/powerpc/mm/dump_linuxpagetables.h @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#include + +struct flag_info { + u64 mask; + u64 val; + const char *set; + const char *clear; + bool is_val; + int shift; +}; + +struct pgtable_level { + const struct flag_info *flag; + size_t num; + u64 mask; +}; + +extern struct pgtable_level pg_level[5];