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 3E0C8C282EC for ; Tue, 18 Mar 2025 04:38:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 60CD5280002; Tue, 18 Mar 2025 00:38:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5BE6D280001; Tue, 18 Mar 2025 00:38:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 48305280002; Tue, 18 Mar 2025 00:38:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 2C14A280001 for ; Tue, 18 Mar 2025 00:38:10 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id A38B956B0B for ; Tue, 18 Mar 2025 04:38:10 +0000 (UTC) X-FDA: 83233414740.10.5F2BF04 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf13.hostedemail.com (Postfix) with ESMTP id 91C5B2000B for ; Tue, 18 Mar 2025 04:38:08 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf13.hostedemail.com: domain of anshuman.khandual@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=anshuman.khandual@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742272689; a=rsa-sha256; cv=none; b=auCIMtJGgxRb8Y5vyF0gekosDBBOo35qtUt4LDOLSWvbwwJQ7TjTfPsAsOb5P+9NU5WoeT gmE939eY16AcwIj9RjS7NviBkmVRUNDpjPZcGfurrZi/QAkGCiFJZ47JBc+t7VpVwEcbae u+X4h+xgzZwIfSl6nJ5df/dxFD9bdiU= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf13.hostedemail.com: domain of anshuman.khandual@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=anshuman.khandual@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742272689; 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:references; bh=rwck3yq1zfX0/VzN1MDQ+NCBErVzByOdr+S/IgfqxhI=; b=hBSbmP/h4fPRUXXosMDTxkOKS/L2IP/JYOKPgvhhj//xrz0KDPwKYtlHbOUw8tAAGF7hsM 3jOriNOMD1YC8OBP/YK/GCeEdSR/d8PrNMdqZ9tluMFOfqLm6TEX80QWRsh9OqcVrVXA5E iTqIzML1fDllWsKoxZak2DTJPFVynqA= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 300C2152B; Mon, 17 Mar 2025 21:38:16 -0700 (PDT) Received: from [10.163.44.33] (unknown [10.163.44.33]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B992E3F63F; Mon, 17 Mar 2025 21:38:00 -0700 (PDT) Message-ID: <392723e2-da82-4bdb-bebe-ed1c982d0d5f@arm.com> Date: Tue, 18 Mar 2025 10:07:56 +0530 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] arm64/ptdump: Replace u64 with pteval_t To: Ryan Roberts , linux-mm@kvack.org Cc: Catalin Marinas , Will Deacon , Steven Price , Madhavan Srinivasan , Nicholas Piggin , Paul Walmsley , Palmer Dabbelt , Gerald Schaefer , Heiko Carstens , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Andrew Morton , 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, Marc Zyngier References: <20250317061818.16244-1-anshuman.khandual@arm.com> <20250317061818.16244-3-anshuman.khandual@arm.com> <16c12c3f-f2c2-45fa-9db6-4dfaeb002059@arm.com> Content-Language: en-US From: Anshuman Khandual In-Reply-To: <16c12c3f-f2c2-45fa-9db6-4dfaeb002059@arm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam07 X-Rspam-User: X-Stat-Signature: g5y1com8ucsd8tjzkqmanjcztu1dcozc X-Rspamd-Queue-Id: 91C5B2000B X-HE-Tag: 1742272688-908380 X-HE-Meta: U2FsdGVkX19U8dIKo24v84O4+bw1n5Opt1dn69DZIqNEHznHM2HbD/geqqBgfqcvBF+XLo3yEGB+YIjK2MwoqQX7OPantDjJ7GaNgvCKx4q9zsVK+IOWNJ/qlsSbuLiM95gV3HSnqWwtWwcgS7g6k8W4bh54+sL7CEYQFlGsfsNZY4kMSQlyE8OaklrqYytzbH1I8Wc77fDpUZqtvQjCpBnBzQtmpQFtTWKSxMkDZeADvpuKeK+QuJsqG/YHygyX3IUqQurtDsIjnIKMbgjorJ0lIYODdpDINoYMNmiNA27VeUiY5BzapzSboh42h8khyMqGpyM1w8bNZKUVC7ILAIscdB8Js8zLs3K6WXhe8bofA9DojAgZgHk75SO+yJANZt3s3yl4ttBmR36zkpApJcjg/r8J6yEUhTts38AV2JTflch7Inb2svGm6S6xrTkPkg5M7QH+zlXnxba+tJANbEaAWrGbC7psPe3IW/QmafwUr0FKOGyOig+l3cwJaNNqF1PeWkrRXbgw0lGGWFQXzrIBml4MkZK5tTa+8DbYBFkWgTDL95bJQz9ZqPCnnCCYR8Xd3sP4fz8BT9rDhmrKhxc9IvJkkxuHT4ONzmkuoA90Y1U7jARqplF0S2EYfAzFRTXBjjz3t6S4pEhQ+8Q7YS/4mG+9Ub+72bGKibTrLaOEZl/N4ev5XzhfglaWIT6a77Ja23MUvVrNWh9CxKC2YYJ8ckxWBPFGoIcCTEF08YsxG0vq/mzOSLHU++ZfSA4BoA6GLRW6V78iBxW+SmueZn4JMdPj48CuALC8bdFQ7d8Nf7fFWNuN47/bB5BoV/XfxxAYibrpECqh9AIN9uoF5iigLfeNtABGcbxMO+Q3rFd2PhU6xJCSgsumJCCng5rDicwoBydlWXRKRqWVurLJdVYbC4WlsP7Gi1xYqkFWr/Du/byNZlEdYJS/HG/F6WhlY5QbSsh4f35m9oRqJKu fnYX2gfy sc2arLde1mWe+llrLqt4B7HE9+SvDXty0objwrOhF3psBo1UXhSixoM/GZDlEQhCg5Yspyk+PO5cXvfgPYpTjuVEETfmMA163UWMVgJUSg6GnE/cNrrabS9hnxlR+eoDDh8cHY0Y/14LCAsoEX1uNFxUYkBqLKz3tkUpg0FCxmZAHUbOs5dsFa2Ef9kZQrkZpfGHDYD7zHaJrBo/xlHF+s0wkPyyPM3ubvYvbrN0NmrEFtzTsLhRSPfGSEJFhzN/J3XeX3Jftyc++lTpTDXtsSfhou/NmKrbT0aYm/E/bmzzdmlAGHzo8YGvr0be8KsgPKUhfZy+iGzl/AEA= 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 3/17/25 14:58, Ryan Roberts wrote: > On 17/03/2025 06:18, Anshuman Khandual wrote: >> Page table entry's value, mask and protection are represented with pteval_t >> data type format not u64 that has been assumed while dumping the page table >> entries. Replace all such u64 instances with pteval_t instead as required. >> >> Cc: Catalin Marinas >> Cc: Will Deacon >> Cc: Marc Zyngier >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: linux-kernel@vger.kernel.org >> Signed-off-by: Anshuman Khandual >> --- >> arch/arm64/include/asm/ptdump.h | 8 ++++---- >> arch/arm64/mm/ptdump.c | 2 +- >> 2 files changed, 5 insertions(+), 5 deletions(-) >> >> diff --git a/arch/arm64/include/asm/ptdump.h b/arch/arm64/include/asm/ptdump.h >> index e5da9ce8a515..476a870489b9 100644 >> --- a/arch/arm64/include/asm/ptdump.h >> +++ b/arch/arm64/include/asm/ptdump.h >> @@ -24,8 +24,8 @@ struct ptdump_info { >> }; >> >> struct ptdump_prot_bits { >> - u64 mask; >> - u64 val; >> + pteval_t mask; >> + pteval_t val; > > Given Ard's suggestion of using "ptdesc" as a generic term for PTDESC_SHIFT (or > PTDESC_ORDER, or whatever we ended up calling it), I wonder if it would be > cleaner to do the same with the types? We could have a ptdesc_t, which is > typedef'ed as u64 (or u128), then pteval_t, pmdval_t, ..., could all be > typedef'ed as ptdesc_t. Then for code that just wants a generic pgtable > descriptor value, we can use that type to indicate that it can be at any level. Something like the following ? Will cross check again if this might have missed something which could be converted as ptdesc_t as well. diff --git a/arch/arm64/include/asm/pgtable-types.h b/arch/arm64/include/asm/pgtable-types.h index 6d6d4065b0cb..686541e986e3 100644 --- a/arch/arm64/include/asm/pgtable-types.h +++ b/arch/arm64/include/asm/pgtable-types.h @@ -11,11 +11,13 @@ #include -typedef u64 pteval_t; -typedef u64 pmdval_t; -typedef u64 pudval_t; -typedef u64 p4dval_t; -typedef u64 pgdval_t; +typedef u64 ptdesc_t; + +typedef ptdesc_t pteval_t; +typedef ptdesc_t pmdval_t; +typedef ptdesc_t pudval_t; +typedef ptdesc_t p4dval_t; +typedef ptdesc_t pgdval_t; /* * These are used to make use of C type-checking.. @@ -46,7 +48,7 @@ typedef struct { pgdval_t pgd; } pgd_t; #define pgd_val(x) ((x).pgd) #define __pgd(x) ((pgd_t) { (x) } ) -typedef struct { pteval_t pgprot; } pgprot_t; +typedef struct { ptdesc_t pgprot; } pgprot_t; #define pgprot_val(x) ((x).pgprot) #define __pgprot(x) ((pgprot_t) { (x) } ) diff --git a/arch/arm64/include/asm/ptdump.h b/arch/arm64/include/asm/ptdump.h index e5da9ce8a515..9548813bc877 100644 --- a/arch/arm64/include/asm/ptdump.h +++ b/arch/arm64/include/asm/ptdump.h @@ -24,8 +24,8 @@ struct ptdump_info { }; struct ptdump_prot_bits { - u64 mask; - u64 val; + ptdesc_t mask; + ptdesc_t val; const char *set; const char *clear; }; @@ -34,7 +34,7 @@ struct ptdump_pg_level { const struct ptdump_prot_bits *bits; char name[4]; int num; - u64 mask; + ptdesc_t mask; }; /* @@ -51,7 +51,7 @@ struct ptdump_pg_state { const struct mm_struct *mm; unsigned long start_address; int level; - u64 current_prot; + ptdesc_t current_prot; bool check_wx; unsigned long wx_pages; unsigned long uxn_pages; diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 1d25d8899dbf..42e281c07c2f 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -29,7 +29,7 @@ static bool region_is_misaligned(const efi_memory_desc_t *md) * executable, everything else can be mapped with the XN bits * set. Also take the new (optional) RO/XP bits into account. */ -static __init pteval_t create_mapping_protection(efi_memory_desc_t *md) +static __init ptdesc_t create_mapping_protection(efi_memory_desc_t *md) { u64 attr = md->attribute; u32 type = md->type; @@ -83,7 +83,7 @@ static __init pteval_t create_mapping_protection(efi_memory_desc_t *md) int __init efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md) { - pteval_t prot_val = create_mapping_protection(md); + ptdesc_t prot_val = create_mapping_protection(md); bool page_mappings_only = (md->type == EFI_RUNTIME_SERVICES_CODE || md->type == EFI_RUNTIME_SERVICES_DATA); diff --git a/arch/arm64/kernel/pi/map_kernel.c b/arch/arm64/kernel/pi/map_kernel.c index e57b043f324b..a00f57c73d81 100644 --- a/arch/arm64/kernel/pi/map_kernel.c +++ b/arch/arm64/kernel/pi/map_kernel.c @@ -159,7 +159,7 @@ static void noinline __section(".idmap.text") set_ttbr0_for_lpa2(u64 ttbr) static void __init remap_idmap_for_lpa2(void) { /* clear the bits that change meaning once LPA2 is turned on */ - pteval_t mask = PTE_SHARED; + ptdesc_t mask = PTE_SHARED; /* * We have to clear bits [9:8] in all block or page descriptors in the diff --git a/arch/arm64/kernel/pi/map_range.c b/arch/arm64/kernel/pi/map_range.c index 2b69e3beeef8..30c6bc50844f 100644 --- a/arch/arm64/kernel/pi/map_range.c +++ b/arch/arm64/kernel/pi/map_range.c @@ -30,7 +30,7 @@ void __init map_range(u64 *pte, u64 start, u64 end, u64 pa, pgprot_t prot, int level, pte_t *tbl, bool may_use_cont, u64 va_offset) { u64 cmask = (level == 3) ? CONT_PTE_SIZE - 1 : U64_MAX; - pteval_t protval = pgprot_val(prot) & ~PTE_TYPE_MASK; + ptdesc_t protval = pgprot_val(prot) & ~PTE_TYPE_MASK; int lshift = (3 - level) * (PAGE_SHIFT - 3); u64 lmask = (PAGE_SIZE << lshift) - 1; @@ -87,7 +87,7 @@ void __init map_range(u64 *pte, u64 start, u64 end, u64 pa, pgprot_t prot, } } -asmlinkage u64 __init create_init_idmap(pgd_t *pg_dir, pteval_t clrmask) +asmlinkage u64 __init create_init_idmap(pgd_t *pg_dir, ptdesc_t clrmask) { u64 ptep = (u64)pg_dir + PAGE_SIZE; pgprot_t text_prot = PAGE_KERNEL_ROX; diff --git a/arch/arm64/kernel/pi/pi.h b/arch/arm64/kernel/pi/pi.h index c91e5e965cd3..91dcb5b6bbd1 100644 --- a/arch/arm64/kernel/pi/pi.h +++ b/arch/arm64/kernel/pi/pi.h @@ -33,4 +33,4 @@ void map_range(u64 *pgd, u64 start, u64 end, u64 pa, pgprot_t prot, asmlinkage void early_map_kernel(u64 boot_status, void *fdt); -asmlinkage u64 create_init_idmap(pgd_t *pgd, pteval_t clrmask); +asmlinkage u64 create_init_idmap(pgd_t *pgd, ptdesc_t clrmask); diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c index 07aeab8a7606..c86c348857c4 100644 --- a/arch/arm64/mm/mmap.c +++ b/arch/arm64/mm/mmap.c @@ -83,7 +83,7 @@ arch_initcall(adjust_protection_map); pgprot_t vm_get_page_prot(unsigned long vm_flags) { - pteval_t prot; + ptdesc_t prot; /* Short circuit GCS to avoid bloating the table. */ if (system_supports_gcs() && (vm_flags & VM_SHADOW_STACK)) { diff --git a/arch/arm64/mm/ptdump.c b/arch/arm64/mm/ptdump.c index fd1610b4fd15..280e850f1688 100644 --- a/arch/arm64/mm/ptdump.c +++ b/arch/arm64/mm/ptdump.c @@ -194,7 +194,7 @@ void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, struct ptdump_pg_state *st = container_of(pt_st, struct ptdump_pg_state, ptdump); struct ptdump_pg_level *pg_level = st->pg_level; static const char units[] = "KMGTPE"; - u64 prot = 0; + ptdesc_t prot = 0; /* check if the current level has been folded dynamically */ if (st->mm && ((level == 1 && mm_p4d_folded(st->mm)) || -- 2.25.1 > > Thanks, > Ryan > >> const char *set; >> const char *clear; >> }; >> @@ -34,7 +34,7 @@ struct ptdump_pg_level { >> const struct ptdump_prot_bits *bits; >> char name[4]; >> int num; >> - u64 mask; >> + pteval_t mask; >> }; >> >> /* >> @@ -51,7 +51,7 @@ struct ptdump_pg_state { >> const struct mm_struct *mm; >> unsigned long start_address; >> int level; >> - u64 current_prot; >> + pteval_t current_prot; >> bool check_wx; >> unsigned long wx_pages; >> unsigned long uxn_pages; >> diff --git a/arch/arm64/mm/ptdump.c b/arch/arm64/mm/ptdump.c >> index fd1610b4fd15..a5651be95868 100644 >> --- a/arch/arm64/mm/ptdump.c >> +++ b/arch/arm64/mm/ptdump.c >> @@ -194,7 +194,7 @@ void note_page(struct ptdump_state *pt_st, unsigned long addr, int level, >> struct ptdump_pg_state *st = container_of(pt_st, struct ptdump_pg_state, ptdump); >> struct ptdump_pg_level *pg_level = st->pg_level; >> static const char units[] = "KMGTPE"; >> - u64 prot = 0; >> + pteval_t prot = 0; >> >> /* check if the current level has been folded dynamically */ >> if (st->mm && ((level == 1 && mm_p4d_folded(st->mm)) || >