Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2812010lqp; Mon, 25 Mar 2024 09:51:58 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXnbkyfw4RwHAqdEIncd7G0buUmator1YpAEEhqTxcQOw1i1cSnXyN7hMZAG7n7IS7TqbfOgZgV9t8SF15VB+UNzNRGlSk4yrw4cFy5pg== X-Google-Smtp-Source: AGHT+IGjWRLhoF/NPu46mDRB3D8ZPudTiZDexF4YgsV7utUoIyYY0PFOV6O2uEBPavP3fNQRPU6Y X-Received: by 2002:a05:6358:76a0:b0:17e:b72a:b4c6 with SMTP id e32-20020a05635876a000b0017eb72ab4c6mr198647rwg.27.1711385518458; Mon, 25 Mar 2024 09:51:58 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711385518; cv=pass; d=google.com; s=arc-20160816; b=EAM2QOHmXWn646XUtaHvdMWlIkwJ2jlJ/6OdJFyl7lVx94xau7Xbdnei/KMRLPkNb7 YTjwS3GfZrbS4dV9AY+x6hPCD4gEz57FDZm60wopa6CILvWVMBMHk4p6p4MK2z4ZgU13 F0b8eyGYIYFx6D7wz3u479DmQ9N6LdFEox2CYVSpz1K97ApSlO7pMOsA4DHoJLSWHJEW Ax5K1OYEAVpjAxQg0kjPPnkDCSxGhaMZ8kZFaxb/Txq9jpJ5ophNcBAnAkKmQOYQdt+y 4+FafBJ6Qvpf5002S7bI+z9oWADl+kwPas8vceqUhY96uBb7OqZBjvjwrPyMUQCf23jp rhHQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=0YCs+LKiKC2TE72Eu1gZ3o51fMCPRk7LsKO1XbTN9Z0=; fh=21vk3J0tHc4wgg3UxOCfvUnkixvoiEd7I94CvMLI7/8=; b=0xefXLSERbyHM7x8/iFJnBc7DfKaN+3dLRF/530onCnVCKzbAkWc+/hMmrRKwChRK1 EaczouZ+RKfMLdbAKGuLXHE2BUf4J4vtsiKSvb+kjY29NVsfGQBikol64n2JE+qMlxFz anjjGEnRIpLigJs8OPwS867fIF8vEcbgzrcQQ14PTxClVnBMsznxPrbxfcbj0DcjEIzV VSz643ouqXXcMFE7pJAfXyxiKgOHUmQA/r9IWX0V+8UV7ubC+An84GvyMzxJIdRkZuEC 0TPAANuSS61NwGM4Avc0TkWY5v9Tr5i5GDBlX8h0RbUtkxIvT1qLgdvYeG887ze+3ydz VFIg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=csgroup.eu dmarc=pass fromdomain=csgroup.eu); spf=pass (google.com: domain of linux-kernel+bounces-117303-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-117303-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=csgroup.eu Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id k27-20020a634b5b000000b005dc422577a9si7785038pgl.209.2024.03.25.09.51.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 09:51:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-117303-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=csgroup.eu dmarc=pass fromdomain=csgroup.eu); spf=pass (google.com: domain of linux-kernel+bounces-117303-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-117303-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=csgroup.eu Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 8D8CA29B2CF for ; Mon, 25 Mar 2024 16:43:50 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6CF2E15A4A7; Mon, 25 Mar 2024 14:56:42 +0000 (UTC) Received: from pegase1.c-s.fr (pegase1.c-s.fr [93.17.236.30]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2DAD716F91E for ; Mon, 25 Mar 2024 14:56:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=93.17.236.30 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711378601; cv=none; b=rlPK8xx44tbpTVHsu8y5m1HHKWymfG9CylfToIR+tZYGzsddfXaWUf1pQyftpoxt0ZgAqZ+b28DonEc4Rsll6MkW0eFHYN012wtLkvu5TUGz0xgNRYfWgqXYDxZ68oA2hE0Qj/h0MrR0MfTvWcVdggQphrjd254nGy4jkBOHHKo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711378601; c=relaxed/simple; bh=Jznk0U1nUM93F+OjDNFTDQGGpO/+NygdkRGhqiyMtIg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kKMsswnxv5yaHPcchvoE0FjejH68v6NuRhd5tFVx9fTjG5z0k//jbYJ978dA7dbqlGlJdzJ/gZ0E9EuYpN+d8QGJmbXJhGA73EvhXEOMG4FqkWzLUjHU/zw3oK/wb+u2X5Sxn7s2v+WRFAdUKKKoLfb5ZAbLO5zce5XYP03XqH8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu; spf=pass smtp.mailfrom=csgroup.eu; arc=none smtp.client-ip=93.17.236.30 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=csgroup.eu Received: from localhost (mailhub3.si.c-s.fr [192.168.12.233]) by localhost (Postfix) with ESMTP id 4V3GGS2kLVz9sjs; Mon, 25 Mar 2024 15:56:16 +0100 (CET) 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 JVR3mRugAZfo; Mon, 25 Mar 2024 15:56:16 +0100 (CET) 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 4V3GGK5kxZz9snj; Mon, 25 Mar 2024 15:56:09 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id BC19F8B76C; Mon, 25 Mar 2024 15:56:09 +0100 (CET) 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 jllWntrCz3wc; Mon, 25 Mar 2024 15:56:09 +0100 (CET) Received: from PO20335.idsi0.si.c-s.fr (unknown [172.25.230.108]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 9A95A8B765; Mon, 25 Mar 2024 15:56:09 +0100 (CET) From: Christophe Leroy To: Andrew Morton , Jason Gunthorpe , Peter Xu Cc: Christophe Leroy , linux-kernel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org Subject: [RFC PATCH 5/8] powerpc/mm: Allow hugepages without hugepd Date: Mon, 25 Mar 2024 15:55:58 +0100 Message-ID: <69591a2e4fd72c1dd09eb8e0b2e7f1256fd32304.1711377230.git.christophe.leroy@csgroup.eu> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1711378567; l=4076; i=christophe.leroy@csgroup.eu; s=20211009; h=from:subject:message-id; bh=Jznk0U1nUM93F+OjDNFTDQGGpO/+NygdkRGhqiyMtIg=; b=NRVJXrlJlcUaGzfQGV1gXGWLIRU/BzjMzXwi1e9lA4gXddnJMpRRfFmCSybSn6ZqcShsYRtTG eE1Wia4TerHBN/z+blYQ+hywkW7qiSZ3w7OWik7L539Ar+p3FBIVxKC X-Developer-Key: i=christophe.leroy@csgroup.eu; a=ed25519; pk=HIzTzUj91asvincQGOFx6+ZF5AoUuP9GdOtQChs7Mm0= Content-Transfer-Encoding: 8bit In preparation of implementing huge pages on powerpc 8xx without hugepd, enclose hugepd related code inside an ifdef CONFIG_ARCH_HAS_HUGEPD Signed-off-by: Christophe Leroy --- arch/powerpc/include/asm/hugetlb.h | 2 ++ arch/powerpc/include/asm/nohash/pgtable.h | 8 +++++--- arch/powerpc/mm/hugetlbpage.c | 10 ++++++++++ arch/powerpc/mm/pgtable.c | 2 ++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/include/asm/hugetlb.h b/arch/powerpc/include/asm/hugetlb.h index ea71f7245a63..a05657e5701b 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, 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..db73ad845a2a 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,13 @@ 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) +{ + return pte_alloc_huge(mm, pmd_off(mm, addr), addr, sz); +} +#endif #ifdef CONFIG_PPC_BOOK3S_64 /* @@ -248,6 +256,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 +514,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; -- 2.43.0