From patchwork Fri May 17 18:59:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Leroy X-Patchwork-Id: 13667313 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 0B8D4C04FFE for ; Fri, 17 May 2024 19:00:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 89E4D6B0099; Fri, 17 May 2024 15:00:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 84E3C6B009A; Fri, 17 May 2024 15:00:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 715BB6B009B; Fri, 17 May 2024 15:00:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 4E4206B0099 for ; Fri, 17 May 2024 15:00:31 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C0D7BA045D for ; Fri, 17 May 2024 19:00:30 +0000 (UTC) X-FDA: 82128803820.10.6D64BFE Received: from pegase1.c-s.fr (pegase1.c-s.fr [93.17.236.30]) by imf27.hostedemail.com (Postfix) with ESMTP id 886974000F for ; Fri, 17 May 2024 19:00:28 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=none; spf=pass (imf27.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=1715972428; 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=/edrE2diPSrDoHYRxbXcVysX8qErvrUoiCjIbzVdq0A=; b=loNSsS8cHRW5gsDzTdBWWZhCvFEF7cvXB5Z2MHo6GXPgBJnx4koJBoFvvtWLXLffROqthh N3osxQarfCCdqytD0GSnoTOSAjBjd+ZVeEp3YP1uZfVTE4SF5PYhNhc4FFKAg0HVOjnGlP /18YgqAJe6gMx/5pxqmYQMWJfc0rTww= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1715972428; a=rsa-sha256; cv=none; b=Tlg7osqqxjyafIHk7gGqq/w7QXUumv/2ri51iIPtUXYLT21ErO7OizmblroOz5QUp27/n0 RF+TnNS01aNcbiDaQXdMDe9ZyKU7Ks3y6XBAkxxyIYNIkL02AIXTTpJc0j33wRo9uWkbnm FJ7l1ogKyRXYCUvOXvBSqrWI4JQZCM4= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=none; spf=pass (imf27.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 Received: from localhost (mailhub3.si.c-s.fr [192.168.12.233]) by localhost (Postfix) with ESMTP id 4Vgx9P0dblz9t0b; Fri, 17 May 2024 21:00:09 +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 Dh53uZwyolMl; Fri, 17 May 2024 21:00:09 +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 4Vgx9L0fNXz9sy4; Fri, 17 May 2024 21:00:06 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 123E58B775; Fri, 17 May 2024 21:00:06 +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 gSQP0sesHSz5; Fri, 17 May 2024 21:00:05 +0200 (CEST) Received: from PO20335.idsi0.si.c-s.fr (unknown [192.168.232.121]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 81FEC8B786; Fri, 17 May 2024 21:00:05 +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 v2 05/20] powerpc/mm: Allow hugepages without hugepd Date: Fri, 17 May 2024 20:59:59 +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=1715972396; l=5056; i=christophe.leroy@csgroup.eu; s=20211009; h=from:subject:message-id; bh=I4UsJaxfqWCr6V6W5RXQLS8pGH/1YRxr58LkMABPEp8=; b=y8YNsxDQQALuLaML6eKaripIXxjHtP2GbnBYFSWLMGP9P0CyaP47NYx88GjVwawkyAE6f73e4 vZXnDXc/h2iC/zyQC1DT24JmlUA+mWWBXRQc6pM3mcyCmfPBKuvsdxH X-Developer-Key: i=christophe.leroy@csgroup.eu; a=ed25519; pk=HIzTzUj91asvincQGOFx6+ZF5AoUuP9GdOtQChs7Mm0= X-Rspam-User: X-Stat-Signature: e7gepyeeqodad9ub4tnm8c4ywagjghcb X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 886974000F X-HE-Tag: 1715972428-579156 X-HE-Meta: U2FsdGVkX1/yyDZabeS1yZ7mMIM3JVANZ4JrLpjzAPuCrrIp3C0H1riS0E/llZfJLAf6bLW1HgKdWb5dZzTqj7yYipUIjgjxq01yW4MQSb4AykrGss1aJIaCKOOHE28MVPIww+iaaYYWEskyOUCJQ391nubq1xWBXfewX5cB6YoevHZqWEU/E9+HGkLouF1oq/3cDLuuiYqc3a4cbOzE9qBJgQpUT8EIYD7oR09ocFSxgXcWFztbKs27e6CAu3URbqKdVFlpmJZECRu6NjRXTQTuyZKXPnbVAE5wYXrgWFFbYbZM5zGeqwzl5hiKpuhKBQViZGI1Im2accvVJuxh/cnIw76R//U1tqd+k70TCtNLDwETWLrbijQieOPEtvHNh33tHipqlf2LLvaIS4EBlMg2lqBT45+rYoVQNElmFrObXCMCMOxAo2UJgRiEm0rOGT7auHEwgDODCcez5OMzBUv5IxBwsrJeUuQtZfIccgac01T+MhTXoFlzOt3IViSy+5FisJB12/rrZ31YrDqcpiZpZlvCELUdBldZW4VfwrgSqEc9lijRAdXLFIdyOcjG/QSy/1dmIqZzQH9sz2IJfvivV0qpcxV+ArM4w1diJuwIf3dl/HkEmdLG57Z2rmjj02AQCJ5UIlpoosgKKsIo/kIWJC34GzvxBfTWjy/Sncixl1gRTiStj+4DIZAWGqRpPd6yC+tzrGk2qYD72RExp+2W4AJxRbMNfngxc03q3UaNsYfP/K5NNFPlwGWXpP4NgAUVTUuc8xEL7sGQe2VS8yHRjbYHsc9mnDaORF0MN+tgZATfZKYInREXQPD6sLf6KvT+PVbMjjWm6UQEPlv8E9sYd2YX2FROkkw/ImjV86/EMYbyJSw9Fn9wBIu9ZrzoAf078zsi0/urPnQ5uYN8z+DG2zNP+Duv8B1MSWjFdnpHuXNGjgOQmY4Yi21Dsvq7K6WTCWeBoF8fHwuiekK p/ODYl2y aFGJ2huOy+2fS+LN1vL4vn0jImnOxnYnUf0O6uw0RPV0YVZ0NogtHzTeFQXvQUfxVu/ThDWSfJc0grGcbbmhgXd6TH3rdOprlPQF7ibNucd2oLmZdjOlGy92kpx7k7FmTZEkX 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 --- arch/powerpc/include/asm/book3s/32/pgalloc.h | 2 -- arch/powerpc/include/asm/hugetlb.h | 10 ++-------- arch/powerpc/include/asm/nohash/pgtable.h | 8 +++++--- arch/powerpc/mm/hugetlbpage.c | 13 +++++++++++++ arch/powerpc/mm/pgtable.c | 2 ++ 5 files changed, 22 insertions(+), 13 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 427db14292c9..ac3353f7f2ac 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 @@ -351,6 +351,10 @@ static inline int hugepd_ok(hugepd_t hpd) #endif } +#define is_hugepd(hpd) (hugepd_ok(hpd)) +#endif + +#ifdef CONFIG_HUGETLB_PAGE static inline int pmd_huge(pmd_t pmd) { return 0; @@ -360,8 +364,6 @@ static inline int pud_huge(pud_t pud) { return 0; } - -#define is_hugepd(hpd) (hugepd_ok(hpd)) #endif int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot); diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c index 66ac56b26007..82495b8ea793 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,16 @@ 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) +{ + if (sz < PMD_SIZE) + return pte_alloc_huge(mm, pmd_off(mm, addr), addr, sz); + + return NULL; +} +#endif #ifdef CONFIG_PPC_BOOK3S_64 /* @@ -248,6 +259,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 +517,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 9e7ba9c3851f..acdf64c9b93e 100644 --- a/arch/powerpc/mm/pgtable.c +++ b/arch/powerpc/mm/pgtable.c @@ -487,8 +487,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;