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 30C73CD1284 for ; Tue, 2 Apr 2024 19:05:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7D3536B0085; Tue, 2 Apr 2024 15:05:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 75C546B0087; Tue, 2 Apr 2024 15:05:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5D5DF6B0088; Tue, 2 Apr 2024 15:05:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 3BB036B0085 for ; Tue, 2 Apr 2024 15:05:56 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id B898F40942 for ; Tue, 2 Apr 2024 19:05:55 +0000 (UTC) X-FDA: 81965521470.02.56E3C10 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf14.hostedemail.com (Postfix) with ESMTP id EF604100015 for ; Tue, 2 Apr 2024 19:05:53 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=hwwp3R1q; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf14.hostedemail.com: domain of nathan@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=nathan@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1712084754; a=rsa-sha256; cv=none; b=korr+7+EJBM6Sd0/VIlCOW5TvJMIGfjaowRAzif7/eGGuResk4xEGruQWXkloNX8HGbmbI zCLCTnoI6C17WOH3YAezUvStYPO0BzUFYLGP3uKjm2B8/YKqaAy2nr5AgoXlH3Qsrn+8TH sUhHV9FCnyvMP5F78HWXY0ubd0plEvw= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=hwwp3R1q; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf14.hostedemail.com: domain of nathan@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=nathan@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1712084754; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=6GexfItPSx/X1JwNtGHveeeWVr8PS/NQarfdt4mlrpI=; b=P4PSj2FQzccP50FSBEVMEci21OcsLjpiOYbVmbERmqHOWpagUxcam4k3zRuFl1hp+7A0QE 5Hwiyyc8e+8KCex7mb5Lip9sq5C4Yy3RUX2ZNbVIsRyYuE6FGrcgM5y9XkQSEiRvEZED2f 0UNO6E9Al3s5VeIFgHduNuPMNi/VeRU= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id DCD8861069; Tue, 2 Apr 2024 19:05:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 174E5C433C7; Tue, 2 Apr 2024 19:05:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712084752; bh=ivObVSKpIkBqCwHlwbBnTW/chcdv4hxzzU2Dqfw4oFY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=hwwp3R1q+T6P3wBULlM9JHA7unNDdzQ7FyQAUtX0BWJYLvoTcSvvCHVjCZCIVdCpp P3hH9eiYczkxNqEPQVprmxEGBBjdTDkm2i0W/ywueVCqBxiyfNB/jd8/8ayTftnI02 M4H/eOWh4bn/Ygw7g56bJeYODFwZcPWGYCkn3uSNTytEJ/MI/De15gQoC2yuWB5IGj wAuTXHpQOJnJxkjgdHehxG1bRSCJBtOySRaGeOy42ZdtKoUpS5CRRoEU1D0PnH0iBU 8Uk+I9y88XUSxVMrMygH39vnWX8Uwf8mWiw+V7NK/hpKeE+IqP03OkudSXAlGSwaK8 pTIHCarE2rCRw== Date: Tue, 2 Apr 2024 12:05:49 -0700 From: Nathan Chancellor To: peterx@redhat.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yang Shi , "Kirill A . Shutemov" , Mike Kravetz , John Hubbard , Michael Ellerman , Andrew Jones , Muchun Song , linux-riscv@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, Christophe Leroy , Andrew Morton , Christoph Hellwig , Lorenzo Stoakes , Matthew Wilcox , Rik van Riel , linux-arm-kernel@lists.infradead.org, Andrea Arcangeli , David Hildenbrand , "Aneesh Kumar K . V" , Vlastimil Babka , James Houghton , Jason Gunthorpe , Mike Rapoport , Axel Rasmussen , Huacai Chen , WANG Xuerui , loongarch@lists.linux.dev Subject: Re: [PATCH v4 05/13] mm/arch: Provide pud_pfn() fallback Message-ID: <20240402190549.GA706730@dev-arch.thelio-3990X> References: <20240327152332.950956-1-peterx@redhat.com> <20240327152332.950956-6-peterx@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240327152332.950956-6-peterx@redhat.com> X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: EF604100015 X-Stat-Signature: 7snrzcj8zub7fuzknfgeky3ch8wuz753 X-HE-Tag: 1712084753-192578 X-HE-Meta: U2FsdGVkX19fIqaXvg2Ddn7MwPW/C9kNW9/DenqXAjKfu2Z2ZJeVD9AtmpBqGVyBVdhxHdOYzA2Z6LOOVbIXl/UqWcvwz26q5XkGy59X1O5G6lK5VtynO/ffKoA75QC++XNc8tIUjcdHdB7LH7OHDYX3FJHgX3wko6GsyoYtujBPDDAV/p7/36S9v+5RCBq7pD+i/hpUMrhxcgi390CDfaYyRVOB55PcuVUpWtjA/8ig3zVncJuWoDj3T2Dy/BE/sVCvEu66DibdjrUM3btJEeGRX7yEoA0B4muO/Ch38ZrYStllHFS01q749op1RjUocgu3/G7BQUctq60FUI9qfa8QkR+suk4zymZy/qqTlIcbWKcyjU/5p5j/Pwi5mRvPE6CDlY4B/V5+BUgaPAwZ/LKQCB+t0icjqTCfmGKJ/X2qcEyT4XRhPjBvD+hCOgcbXRbXgT/u4IDpCeaglcrWLBOHuVLyxWgAMZt+TKtXw+qutX9ZLBrl29ekjKTHBGnQ39p+dnuVuzXwXShVNxTwS2fDHRLqTYJ5RNeikmUAvD7jVFOICrQC3azycPRQxkTWWsVi7Q1nrSikbV+4hnzsVU9QV9uAc4mmtaopfLFQSXC6gBrUOjvBibDyxyoNmAFgQE/XTbf0xaIG+Lai8SBhJl/UKTCSAQDbWKhJ7ULBTmV2jyew1XbOnYF6qwKC+5ccodwaaEZvY9sw2H/oLnFK+X7o3JL8QfwmiuGNPk5ESK1CrQIZXdzeFNjs3LUvnEakLFLcMc+Ttv7IThnxloX5z5MmHTR8lPzr9ArXeuUICWqazFdSuu3EnmDN1Rho0IArD+WhXXGtUFUZm0IQCyUG0xhLbL+aLr3oUod0ByUnbIjmLUxdMKRksxgPrWrF69e4p7gg8gehpho86fuX4vbLerVuDVW82lhsLXBv9SGYyfUiPh55Jitr6b5lo0w9U//rOvVDLhYto8kQXj6Bx4i jKfdxuTS QbBbrJ3616VMUoqXBsZXMNgSToJZ0quwHNMrntRZ+3yjbLg+PGq+2eBQTt3Up3XzX2u9CIacA24IS4P1bQ5wgQjIKI7bm83KvdFrEp1ZFz0u/ezHyIW8n1BHkLMF/OT5br+In9EcqzpYJ3UnMoWqllfMzCf2B6jQ5ELahANuDerh0zclnlfuy87GI9wdLf836z3IQj4vPucyuUs/S9pZUHodyIDD6RzSkYPnQqnGn+iV7n7k6YYdtVELjVo1JXHmsDBkp1zllTR3wQJNMOm1I5uFLh9GEsm3ERcnPXZoFrxy/zTkQX0oFLRNNXh7pds1HpHsytNpwfggHp1Zsk/JhInEJJknHH/QzoBh90ilA7Ja1VoMJyW2kidVUr932CDbbFnLSrX2vt+vGyXsr71C+ThL32g== 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: Hi Peter (and LoongArch folks), On Wed, Mar 27, 2024 at 11:23:24AM -0400, peterx@redhat.com wrote: > From: Peter Xu > > The comment in the code explains the reasons. We took a different approach > comparing to pmd_pfn() by providing a fallback function. > > Another option is to provide some lower level config options (compare to > HUGETLB_PAGE or THP) to identify which layer an arch can support for such > huge mappings. However that can be an overkill. > > Cc: Mike Rapoport (IBM) > Cc: Matthew Wilcox > Reviewed-by: Jason Gunthorpe > Signed-off-by: Peter Xu > --- > arch/riscv/include/asm/pgtable.h | 1 + > arch/s390/include/asm/pgtable.h | 1 + > arch/sparc/include/asm/pgtable_64.h | 1 + > arch/x86/include/asm/pgtable.h | 1 + > include/linux/pgtable.h | 10 ++++++++++ > 5 files changed, 14 insertions(+) > > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h > index 20242402fc11..0ca28cc8e3fa 100644 > --- a/arch/riscv/include/asm/pgtable.h > +++ b/arch/riscv/include/asm/pgtable.h > @@ -646,6 +646,7 @@ static inline unsigned long pmd_pfn(pmd_t pmd) > > #define __pud_to_phys(pud) (__page_val_to_pfn(pud_val(pud)) << PAGE_SHIFT) > > +#define pud_pfn pud_pfn > static inline unsigned long pud_pfn(pud_t pud) > { > return ((__pud_to_phys(pud) & PUD_MASK) >> PAGE_SHIFT); > diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h > index 1a71cb19c089..6cbbe473f680 100644 > --- a/arch/s390/include/asm/pgtable.h > +++ b/arch/s390/include/asm/pgtable.h > @@ -1414,6 +1414,7 @@ static inline unsigned long pud_deref(pud_t pud) > return (unsigned long)__va(pud_val(pud) & origin_mask); > } > > +#define pud_pfn pud_pfn > static inline unsigned long pud_pfn(pud_t pud) > { > return __pa(pud_deref(pud)) >> PAGE_SHIFT; > diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h > index 4d1bafaba942..26efc9bb644a 100644 > --- a/arch/sparc/include/asm/pgtable_64.h > +++ b/arch/sparc/include/asm/pgtable_64.h > @@ -875,6 +875,7 @@ static inline bool pud_leaf(pud_t pud) > return pte_val(pte) & _PAGE_PMD_HUGE; > } > > +#define pud_pfn pud_pfn > static inline unsigned long pud_pfn(pud_t pud) > { > pte_t pte = __pte(pud_val(pud)); > diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h > index cefc7a84f7a4..273f7557218c 100644 > --- a/arch/x86/include/asm/pgtable.h > +++ b/arch/x86/include/asm/pgtable.h > @@ -234,6 +234,7 @@ static inline unsigned long pmd_pfn(pmd_t pmd) > return (pfn & pmd_pfn_mask(pmd)) >> PAGE_SHIFT; > } > > +#define pud_pfn pud_pfn > static inline unsigned long pud_pfn(pud_t pud) > { > phys_addr_t pfn = pud_val(pud); > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index 600e17d03659..75fe309a4e10 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -1817,6 +1817,16 @@ typedef unsigned int pgtbl_mod_mask; > #define pte_leaf_size(x) PAGE_SIZE > #endif > > +/* > + * We always define pmd_pfn for all archs as it's used in lots of generic > + * code. Now it happens too for pud_pfn (and can happen for larger > + * mappings too in the future; we're not there yet). Instead of defining > + * it for all archs (like pmd_pfn), provide a fallback. > + */ > +#ifndef pud_pfn > +#define pud_pfn(x) ({ BUILD_BUG(); 0; }) > +#endif > + > /* > * Some architectures have MMUs that are configurable or selectable at boot > * time. These lead to variable PTRS_PER_x. For statically allocated arrays it > -- > 2.44.0 > This BUILD_BUG() triggers for LoongArch with their defconfig, so it seems like they need to provide an implementation of pud_pfn()? In function 'follow_huge_pud', inlined from 'follow_pud_mask' at mm/gup.c:1075:10, inlined from 'follow_p4d_mask' at mm/gup.c:1105:9, inlined from 'follow_page_mask' at mm/gup.c:1151:10: include/linux/compiler_types.h:460:45: error: call to '__compiletime_assert_382' declared with attribute error: BUILD_BUG failed 460 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:441:25: note: in definition of macro '__compiletime_assert' 441 | prefix ## suffix(); \ | ^~~~~~ include/linux/compiler_types.h:460:9: note: in expansion of macro '_compiletime_assert' 460 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:59:21: note: in expansion of macro 'BUILD_BUG_ON_MSG' 59 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed") | ^~~~~~~~~~~~~~~~ include/linux/pgtable.h:1887:23: note: in expansion of macro 'BUILD_BUG' 1887 | #define pud_pfn(x) ({ BUILD_BUG(); 0; }) | ^~~~~~~~~ mm/gup.c:679:29: note: in expansion of macro 'pud_pfn' 679 | unsigned long pfn = pud_pfn(pud); | ^~~~~~~ Cheers, Nathan