From patchwork Mon May 27 13:30:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 13675246 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 6A3BDC25B74 for ; Mon, 27 May 2024 13:30:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F0C4B6B0088; Mon, 27 May 2024 09:30:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E21556B0092; Mon, 27 May 2024 09:30:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C24926B00A9; Mon, 27 May 2024 09:30:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 9F22E6B0088 for ; Mon, 27 May 2024 09:30:46 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 673DA811E5 for ; Mon, 27 May 2024 13:30:46 +0000 (UTC) X-FDA: 82164260892.08.3E58C6C Received: from pegase1.c-s.fr (pegase1.c-s.fr [93.17.236.30]) by imf07.hostedemail.com (Postfix) with ESMTP id 4D5F340018 for ; Mon, 27 May 2024 13:30:44 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of christophe.leroy@csgroup.eu designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@csgroup.eu; dmarc=pass (policy=quarantine) header.from=csgroup.eu ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1716816644; a=rsa-sha256; cv=none; b=ig5brBskTC+zoOTOGuZPaFuwDHif6371f5xB+vMk3k34xT98RuJykozPGtQ2M/vAr7DvWx g9hZo2AZIitpfX935sCcXZ6+KSaMD0lo00PbhMPQ7J7lZKbRFjS2TJlw0fpusmfvNrELRv Cwwxn3jc6tQUUos4WCeB/g2HVSWRluQ= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=none; spf=pass (imf07.hostedemail.com: domain of christophe.leroy@csgroup.eu designates 93.17.236.30 as permitted sender) smtp.mailfrom=christophe.leroy@csgroup.eu; dmarc=pass (policy=quarantine) header.from=csgroup.eu ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1716816644; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=E5m+05BYq+bJWtSznFtZ01+612SrMa4OTTFfcWavquc=; b=60IvX6BQl21NgGYRx65/wKytk2Fyo9iy7JrkbzBW0lF3jq3dB34vrceYF839wP5pdyca30 kxtt/Fe6K94EDP0nS7z34y0+pIHH3d8HZRtWclt8ZJndlZlGYL9+2XYF8b+CT5nSRlTB2s o8lBhihPOQnAlhDJNQyQXrOUgmPH2HM= Received: from localhost (mailhub3.si.c-s.fr [192.168.12.233]) by localhost (Postfix) with ESMTP id 4VnxNX3KFXz9tFS; Mon, 27 May 2024 15:30:36 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2X3i08xfsoP6; Mon, 27 May 2024 15:30:36 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 4VnxNW4jMZz9sqS; Mon, 27 May 2024 15:30:35 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 9CB748B773; Mon, 27 May 2024 15:30:35 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id k5MqdDyFkIZz; Mon, 27 May 2024 15:30:35 +0200 (CEST) Received: from PO20335.idsi0.si.c-s.fr (unknown [192.168.232.49]) by messagerie.si.c-s.fr (Postfix) with ESMTP id EB15E8B764; Mon, 27 May 2024 15:30:33 +0200 (CEST) From: Christophe Leroy To: Andrew Morton , Jason Gunthorpe , Peter Xu , Oscar Salvador , Michael Ellerman , Nicholas Piggin Cc: Christophe Leroy , linux-kernel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org Subject: [RFC PATCH v4 06/16] powerpc/mm: Allow hugepages without hugepd Date: Mon, 27 May 2024 15:30:04 +0200 Message-ID: X-Mailer: git-send-email 2.44.0 In-Reply-To: References: MIME-Version: 1.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1716816600; l=5224; i=christophe.leroy@csgroup.eu; s=20211009; h=from:subject:message-id; bh=sE6juotDv7BsAHC8sy2Y+2Se42RoaSJz1OS5qq2ql/0=; b=36Xw7zn/i6QTEaj0XySNCaF0JKcqk1XM13g/ArikPR+BvvyGupcewcydvCdAjEEdhNn2XgG7F 4Zru2XyYpa1Cc3BVAc7UtBSPPaHXy9EATBeQoAGIVmo5aLWgLd/IxfI X-Developer-Key: i=christophe.leroy@csgroup.eu; a=ed25519; pk=HIzTzUj91asvincQGOFx6+ZF5AoUuP9GdOtQChs7Mm0= X-Rspamd-Queue-Id: 4D5F340018 X-Rspam-User: X-Rspamd-Server: rspam12 X-Stat-Signature: ou6hmqxj3cuw96r6as8ei5gz9w6w6x9k X-HE-Tag: 1716816644-363623 X-HE-Meta: U2FsdGVkX19meoIWkOobxdNi3FeCDR98rF9Wmna8Stksghg2PO+zX7y/s3Kk8Zu6gQzHfZGYPQGLBglphIwJl7LHWAX4VXzb3pCDiPxnCEFOzIKyMzNxeTMNsxDPundMW/onUXDQluShgj5B9t83JLn/LNrPUgaem5W+rjsdNsUGFsww7IdibmbyU60pIN4jepWtq9Lhpx2IV7TdKVDuImxcV7uUeS6q+gGKVsE5fvtSTiCcknXg1ohUhNUsuKuP4K6lixzE5hulNnoAofULfCfpaJWREiaLUKL3tKedTbH/+S4AseuNC8FxgMwZNfoPTdyCwUuAQrWAGkdsBCu2wZ7/8zfcpld7Yo6OW4Ro0jvjFy01DqB9/CrSNapKMujK3kWB7rtw98mXbqb4dPLEA11DFNivzEOuxP3hnsTeZiEQUH/Apo3ukokIDWrK7vBtzyxFwsdfqfW2dIc6GR3Z6uKxwppMXHbWvbQ4joxRyGyKreA3BdnDXNuJ/5S316aOEAlwt4arzh8IIzuzwnY+n5ohK287SDpCO1gJJO2clN0sEeRnbK9q9I4G/xcHL8UpoH6cyN66+LG4vPJ2IYpIxjOG4qCP2ZhrKRM+PshWPKp70gDkHN3XRG+lJPVekp8k5eHMdtoW1e68UKE/g0cjTzEkVxYjf8EeN9KY/PxuIblfqy7vlDifO4mSt8NT+V22cQh7lkSFOgGh6DYphB6/m/wWlU8s+CIJErpdo0G14bEO5WdyVerAuMuXVyDQEUo9bvgl8Vj0idH0dIic77cBre7GdZh6bDTIF1KDmDRQGudt9NzIXZHXdnn1lrW+LsycQiU6wNX34uzxNxdtB4FPqvkuIf0lW7ZMvDDgmWG6FuOtzKV/Gw8k9R5OEN9YKz66sBqLlSbRVZ7+KgUAhqXqwlzFg8V81sBDEWVimp7WANDyI6uAm4xrYN/EZiX/Qg1PJ03R3Ks6ljsz8pmNg4t aG1BvYGF Y1PtE3M4W4zOf98w0qf3+QJjEoKbnh3GOqUpDd2bz9l8tFiCrrfe3yTKB7iEC5bnG0cG61vz42xXjXYjF8xI/EqtCkTcwfJ0DVvCcI7j+FT1p2CofkrW+5dx84yo9i+ZDYNzI 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: In preparation of implementing huge pages on powerpc 8xx without hugepd, enclose hugepd related code inside an ifdef CONFIG_ARCH_HAS_HUGEPD This also allows removing some stubs. Signed-off-by: Christophe Leroy Reviewed-by: Oscar Salvador --- v3: - Prepare huge_pte_alloc() for full standard topology, not only for 2-level - Reordered last part of huge_pte_alloc() v4: - Rebased of v6.10-rc1 --- arch/powerpc/include/asm/book3s/32/pgalloc.h | 2 -- arch/powerpc/include/asm/hugetlb.h | 10 ++---- arch/powerpc/include/asm/nohash/pgtable.h | 2 +- arch/powerpc/mm/hugetlbpage.c | 33 ++++++++++++++++++++ arch/powerpc/mm/pgtable.c | 2 ++ 5 files changed, 38 insertions(+), 11 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/32/pgalloc.h b/arch/powerpc/include/asm/book3s/32/pgalloc.h index dc5c039eb28e..dd4eb3063175 100644 --- a/arch/powerpc/include/asm/book3s/32/pgalloc.h +++ b/arch/powerpc/include/asm/book3s/32/pgalloc.h @@ -47,8 +47,6 @@ static inline void pgtable_free(void *table, unsigned index_size) } } -#define get_hugepd_cache_index(x) (x) - static inline void pgtable_free_tlb(struct mmu_gather *tlb, void *table, int shift) { diff --git a/arch/powerpc/include/asm/hugetlb.h b/arch/powerpc/include/asm/hugetlb.h index ea71f7245a63..79176a499763 100644 --- a/arch/powerpc/include/asm/hugetlb.h +++ b/arch/powerpc/include/asm/hugetlb.h @@ -30,10 +30,12 @@ static inline int is_hugepage_only_range(struct mm_struct *mm, } #define is_hugepage_only_range is_hugepage_only_range +#ifdef CONFIG_ARCH_HAS_HUGEPD #define __HAVE_ARCH_HUGETLB_FREE_PGD_RANGE void hugetlb_free_pgd_range(struct mmu_gather *tlb, unsigned long addr, unsigned long end, unsigned long floor, unsigned long ceiling); +#endif #define __HAVE_ARCH_HUGE_PTEP_GET_AND_CLEAR static inline pte_t huge_ptep_get_and_clear(struct mm_struct *mm, @@ -67,14 +69,6 @@ static inline void flush_hugetlb_page(struct vm_area_struct *vma, { } -#define hugepd_shift(x) 0 -static inline pte_t *hugepte_offset(hugepd_t hpd, unsigned long addr, - unsigned pdshift) -{ - return NULL; -} - - static inline void __init gigantic_hugetlb_cma_reserve(void) { } diff --git a/arch/powerpc/include/asm/nohash/pgtable.h b/arch/powerpc/include/asm/nohash/pgtable.h index f5f39d4f03c8..e7fc1314c23e 100644 --- a/arch/powerpc/include/asm/nohash/pgtable.h +++ b/arch/powerpc/include/asm/nohash/pgtable.h @@ -340,7 +340,7 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr, #define pgprot_writecombine pgprot_noncached_wc -#ifdef CONFIG_HUGETLB_PAGE +#ifdef CONFIG_ARCH_HAS_HUGEPD static inline int hugepd_ok(hugepd_t hpd) { #ifdef CONFIG_PPC_8xx diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 594a4b7b2ca2..20fad59ff9f5 100644 --- a/arch/powerpc/mm/hugetlbpage.c +++ b/arch/powerpc/mm/hugetlbpage.c @@ -42,6 +42,7 @@ pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr, unsigned long s return __find_linux_pte(mm->pgd, addr, NULL, NULL); } +#ifdef CONFIG_ARCH_HAS_HUGEPD static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp, unsigned long address, unsigned int pdshift, unsigned int pshift, spinlock_t *ptl) @@ -193,6 +194,36 @@ pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma, return hugepte_offset(*hpdp, addr, pdshift); } +#else +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma, + unsigned long addr, unsigned long sz) +{ + p4d_t *p4d; + pud_t *pud; + pmd_t *pmd; + + addr &= ~(sz - 1); + + p4d = p4d_offset(pgd_offset(mm, addr), addr); + if (!mm_pud_folded(mm) && sz >= P4D_SIZE) + return (pte_t *)p4d; + + pud = pud_alloc(mm, p4d, addr); + if (!pud) + return NULL; + if (!mm_pmd_folded(mm) && sz >= PUD_SIZE) + return (pte_t *)pud; + + pmd = pmd_alloc(mm, pud, addr); + if (!pmd) + return NULL; + + if (sz >= PMD_SIZE) + return (pte_t *)pmd; + + return pte_alloc_huge(mm, pmd, addr); +} +#endif #ifdef CONFIG_PPC_BOOK3S_64 /* @@ -248,6 +279,7 @@ int __init alloc_bootmem_huge_page(struct hstate *h, int nid) return __alloc_bootmem_huge_page(h, nid); } +#ifdef CONFIG_ARCH_HAS_HUGEPD #ifndef CONFIG_PPC_BOOK3S_64 #define HUGEPD_FREELIST_SIZE \ ((PAGE_SIZE - sizeof(struct hugepd_freelist)) / sizeof(pte_t)) @@ -505,6 +537,7 @@ void hugetlb_free_pgd_range(struct mmu_gather *tlb, } } while (addr = next, addr != end); } +#endif bool __init arch_hugetlb_valid_size(unsigned long size) { diff --git a/arch/powerpc/mm/pgtable.c b/arch/powerpc/mm/pgtable.c index bce8a8619589..9010973f036c 100644 --- a/arch/powerpc/mm/pgtable.c +++ b/arch/powerpc/mm/pgtable.c @@ -496,8 +496,10 @@ pte_t *__find_linux_pte(pgd_t *pgdir, unsigned long ea, if (!hpdp) return NULL; +#ifdef CONFIG_ARCH_HAS_HUGEPD ret_pte = hugepte_offset(*hpdp, ea, pdshift); pdshift = hugepd_shift(*hpdp); +#endif out: if (hpage_shift) *hpage_shift = pdshift;