From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id DA8CE219E8 for ; Mon, 2 Mar 2026 04:34:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772426053; cv=none; b=Ehp/+fVyHBnwSitRfNeR+YvQcXSBVgh7IhnN+NSz9liSDJJF2tg6yroycz/I4AJl5CQEWyVN7+uTHQHwaFLgmTaPJ+R+FUIlChVgLrg+p+S0pwKr3rZqd0fxlc0K4MctTzg2cOgtYwJOuskVngyIdlNp0ofUI2dkpnG6fuATFps= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772426053; c=relaxed/simple; bh=l8DbBgvmNhMs0VfiAX/sXGtBI26n70wu49PuIHq2DQs=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=VzQxYWeJl9inTI96bH6VMaYTArEB1AOQYlwWXdw71Ij0igF8G8UQ9CJVQxf9O26fBSQkpakIzfIaXxeQmaVaon8qlbG/RZil4NZElyEcUfpgH44E0+fSyDtrvZJ7d4qu0JpuYq+vhNe5w5ePj2emCLJyh3A3pI6FTtVUK6e0ZMQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com 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 BDEAB14BF; Sun, 1 Mar 2026 20:34:04 -0800 (PST) Received: from [10.164.18.51] (unknown [10.164.18.51]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A82023F7BD; Sun, 1 Mar 2026 20:34:07 -0800 (PST) Message-ID: <7f7130d0-f348-451e-960e-b7e6ae9c9ee7@arm.com> Date: Mon, 2 Mar 2026 10:04:04 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC V1 09/16] arm64/mm: Route all pgtable reads via ptdesc_get() To: Mike Rapoport Cc: linux-arm-kernel@lists.infradead.org, Catalin Marinas , Will Deacon , Ryan Roberts , Mark Rutland , Lorenzo Stoakes , Andrew Morton , David Hildenbrand , Linu Cherian , linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20260224051153.3150613-1-anshuman.khandual@arm.com> <20260224051153.3150613-10-anshuman.khandual@arm.com> Content-Language: en-US From: Anshuman Khandual In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 28/02/26 4:47 PM, Mike Rapoport wrote: > Hi Anshuman, > > On Tue, Feb 24, 2026 at 10:41:46AM +0530, Anshuman Khandual wrote: >> Define arm64 platform specific implementations for new pXdp_get() helpers. >> These resolve into READ_ONCE(), thus ensuring required single copy atomic >> semantics for the page table entry reads. >> >> In future this infrastructure can be used for D128 to maintain single copy >> atomicity semantics with inline asm blocks. >> >> Cc: Catalin Marinas >> Cc: Will Deacon >> Cc: Ryan Roberts >> Cc: Mark Rutland >> Cc: linux-arm-kernel@lists.infradead.org >> Cc: linux-kernel@vger.kernel.org >> Signed-off-by: Anshuman Khandual >> --- >> arch/arm64/include/asm/pgtable.h | 28 +++++++++++++++++++++++++++- >> 1 file changed, 27 insertions(+), 1 deletion(-) >> >> diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h >> index 257af1c3015d..804ef49aea88 100644 >> --- a/arch/arm64/include/asm/pgtable.h >> +++ b/arch/arm64/include/asm/pgtable.h >> @@ -84,6 +84,32 @@ static inline void arch_leave_lazy_mmu_mode(void) >> arch_flush_lazy_mmu_mode(); >> } >> >> +#define ptdesc_get(x) READ_ONCE(x) > > This will be confusing with 'struct ptdesc' APIs, maybe ptent_get()? Created 'ptdesc_t' earlier on arm64 platform as an unified data type, which could represent page table entries including their protection fields and masks for any level. 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; But now it conflicts with generic 'struct ptdesc'. Agreed that overall renaming is required. Probably ptent_t along with ptent_get/set() could be an option. But that is probably orthogonal to the series and can be done later in a separate patch. > >> +#define pmdp_get pmdp_get >> +static inline pmd_t pmdp_get(pmd_t *pmdp) >> +{ >> + return ptdesc_get(*pmdp); >> +} >> + >> +#define pudp_get pudp_get >> +static inline pud_t pudp_get(pud_t *pudp) >> +{ >> + return ptdesc_get(*pudp); >> +} >> + >> +#define p4dp_get p4dp_get >> +static inline p4d_t p4dp_get(p4d_t *p4dp) >> +{ >> + return ptdesc_get(*p4dp); >> +} >> + >> +#define pgdp_get pgdp_get >> +static inline pgd_t pgdp_get(pgd_t *pgdp) >> +{ >> + return ptdesc_get(*pgdp); >> +} >> + >> #ifdef CONFIG_TRANSPARENT_HUGEPAGE >> #define __HAVE_ARCH_FLUSH_PMD_TLB_RANGE >> >> @@ -384,7 +410,7 @@ static inline void __set_pte(pte_t *ptep, pte_t pte) >> >> static inline pte_t __ptep_get(pte_t *ptep) >> { >> - return READ_ONCE(*ptep); >> + return ptdesc_get(*ptep); >> } >> >> extern void __sync_icache_dcache(pte_t pteval); >> -- >> 2.43.0 >> >