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 X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6C66C433ED for ; Fri, 9 Apr 2021 09:19:01 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 4E88461106 for ; Fri, 9 Apr 2021 09:19:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4E88461106 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=csgroup.eu Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id C2B706B006C; Fri, 9 Apr 2021 05:19:00 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id BC7FB6B006E; Fri, 9 Apr 2021 05:19:00 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A692A6B0070; Fri, 9 Apr 2021 05:19:00 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0224.hostedemail.com [216.40.44.224]) by kanga.kvack.org (Postfix) with ESMTP id 8BBC06B006C for ; Fri, 9 Apr 2021 05:19:00 -0400 (EDT) Received: from smtpin15.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 4604F1808EE32 for ; Fri, 9 Apr 2021 09:19:00 +0000 (UTC) X-FDA: 78012279240.15.6A2DBC6 Received: from pegase1.c-s.fr (pegase1.c-s.fr [93.17.236.30]) by imf16.hostedemail.com (Postfix) with ESMTP id 4353680192DD for ; Fri, 9 Apr 2021 09:18:59 +0000 (UTC) Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4FGsy92WK2z9vBLl; Fri, 9 Apr 2021 11:18:57 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id VIGbBDxwdmtv; Fri, 9 Apr 2021 11:18:57 +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 4FGsy917Ksz9vBLh; Fri, 9 Apr 2021 11:18:57 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 485A68B7E0; Fri, 9 Apr 2021 11:18:58 +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 49eHvFWmlrR0; Fri, 9 Apr 2021 11:18:58 +0200 (CEST) Received: from [192.168.4.90] (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 5851C8B7DE; Fri, 9 Apr 2021 11:18:57 +0200 (CEST) Subject: Re: [PATCH v3 5/9] powerpc/mm/book3s64: Update tlb flush routines to take a page walk cache flush argument To: "Aneesh Kumar K.V" , linux-mm@kvack.org, akpm@linux-foundation.org Cc: kaleshsingh@google.com, npiggin@gmail.com, joel@joelfernandes.org, linuxppc-dev@lists.ozlabs.org References: <20210330060752.592769-1-aneesh.kumar@linux.ibm.com> <20210330060752.592769-6-aneesh.kumar@linux.ibm.com> From: Christophe Leroy Message-ID: Date: Fri, 9 Apr 2021 11:18:55 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <20210330060752.592769-6-aneesh.kumar@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 4353680192DD X-Stat-Signature: kswma9jhuumctmqqsz1ocfktzu6okpg3 Received-SPF: none (csgroup.eu>: No applicable sender policy available) receiver=imf16; identity=mailfrom; envelope-from=""; helo=pegase1.c-s.fr; client-ip=93.17.236.30 X-HE-DKIM-Result: none/none X-HE-Tag: 1617959939-270984 Content-Transfer-Encoding: quoted-printable 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: Le 30/03/2021 =C3=A0 08:07, Aneesh Kumar K.V a =C3=A9crit=C2=A0: > Signed-off-by: Aneesh Kumar K.V > --- > .../include/asm/book3s/64/tlbflush-radix.h | 19 ++++++++------- > arch/powerpc/include/asm/book3s/64/tlbflush.h | 23 +++++++++++++++---= - > arch/powerpc/mm/book3s64/radix_hugetlbpage.c | 4 ++-- > arch/powerpc/mm/book3s64/radix_tlb.c | 23 ++++++++----------= - > 4 files changed, 42 insertions(+), 27 deletions(-) >=20 > diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h b/arch= /powerpc/include/asm/book3s/64/tlbflush-radix.h > index 8b33601cdb9d..90c91f7b526f 100644 > --- a/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > +++ b/arch/powerpc/include/asm/book3s/64/tlbflush-radix.h > @@ -56,15 +56,18 @@ static inline void radix__flush_all_lpid_guest(unsi= gned int lpid) > } > #endif > =20 > -extern void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, > - unsigned long start, unsigned long end); > -extern void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigne= d long start, > - unsigned long end, int psize); > -extern void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, > - unsigned long start, unsigned long end); > -extern void radix__flush_tlb_range(struct vm_area_struct *vma, unsigne= d long start, > +void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, > + unsigned long start, unsigned long end, > + bool also_pwc); No sure 'also_pwc' is a nice name. What about 'flush_pwc' ? > +void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, > + unsigned long start, unsigned long end, > + bool also_pwc); > +void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned l= ong start, > + unsigned long end, int psize, bool also_pwc); > +void radix__flush_tlb_range(struct vm_area_struct *vma, unsigned long = start, > unsigned long end); > -extern void radix__flush_tlb_kernel_range(unsigned long start, unsigne= d long end); > +void radix__flush_tlb_kernel_range(unsigned long start, unsigned long = end); > + > =20 > extern void radix__local_flush_tlb_mm(struct mm_struct *mm); > extern void radix__local_flush_all_mm(struct mm_struct *mm); > diff --git a/arch/powerpc/include/asm/book3s/64/tlbflush.h b/arch/power= pc/include/asm/book3s/64/tlbflush.h > index 215973b4cb26..efe5336e2b6f 100644 > --- a/arch/powerpc/include/asm/book3s/64/tlbflush.h > +++ b/arch/powerpc/include/asm/book3s/64/tlbflush.h > @@ -45,13 +45,30 @@ static inline void tlbiel_all_lpid(bool radix) > hash__tlbiel_all(TLB_INVAL_SCOPE_LPID); > } > =20 > +static inline void flush_pmd_tlb_pwc_range(struct vm_area_struct *vma, > + unsigned long start, > + unsigned long end, > + bool also_pwc) > +{ > + if (radix_enabled()) > + return radix__flush_pmd_tlb_range(vma, start, end, also_pwc); > + return hash__flush_tlb_range(vma, start, end); > +} > =20 > #define __HAVE_ARCH_FLUSH_PMD_TLB_RANGE > static inline void flush_pmd_tlb_range(struct vm_area_struct *vma, > unsigned long start, unsigned long end) > +{ > + return flush_pmd_tlb_pwc_range(vma, start, end, false); > +} > + > +static inline void flush_hugetlb_tlb_pwc_range(struct vm_area_struct *= vma, > + unsigned long start, > + unsigned long end, > + bool also_pwc) > { > if (radix_enabled()) > - return radix__flush_pmd_tlb_range(vma, start, end); > + return radix__flush_hugetlb_tlb_range(vma, start, end, also_pwc); > return hash__flush_tlb_range(vma, start, end); > } > =20 > @@ -60,9 +77,7 @@ static inline void flush_hugetlb_tlb_range(struct vm_= area_struct *vma, > unsigned long start, > unsigned long end) > { > - if (radix_enabled()) > - return radix__flush_hugetlb_tlb_range(vma, start, end); > - return hash__flush_tlb_range(vma, start, end); > + return flush_hugetlb_tlb_pwc_range(vma, start, end, false); > } > =20 > static inline void flush_tlb_range(struct vm_area_struct *vma, > diff --git a/arch/powerpc/mm/book3s64/radix_hugetlbpage.c b/arch/powerp= c/mm/book3s64/radix_hugetlbpage.c > index cb91071eef52..55c5c9c39ae2 100644 > --- a/arch/powerpc/mm/book3s64/radix_hugetlbpage.c > +++ b/arch/powerpc/mm/book3s64/radix_hugetlbpage.c > @@ -26,13 +26,13 @@ void radix__local_flush_hugetlb_page(struct vm_area= _struct *vma, unsigned long v > } > =20 > void radix__flush_hugetlb_tlb_range(struct vm_area_struct *vma, unsig= ned long start, > - unsigned long end) > + unsigned long end, bool also_pwc) > { > int psize; > struct hstate *hstate =3D hstate_file(vma->vm_file); > =20 > psize =3D hstate_get_psize(hstate); > - radix__flush_tlb_range_psize(vma->vm_mm, start, end, psize); > + radix__flush_tlb_pwc_range_psize(vma->vm_mm, start, end, psize, also_= pwc); > } > =20 > /* > diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/boo= k3s64/radix_tlb.c > index 817a02ef6032..416fe9b48e14 100644 > --- a/arch/powerpc/mm/book3s64/radix_tlb.c > +++ b/arch/powerpc/mm/book3s64/radix_tlb.c > @@ -1090,7 +1090,7 @@ void radix__flush_tlb_range(struct vm_area_struct= *vma, unsigned long start, > { > #ifdef CONFIG_HUGETLB_PAGE > if (is_vm_hugetlb_page(vma)) > - return radix__flush_hugetlb_tlb_range(vma, start, end); > + return radix__flush_hugetlb_tlb_range(vma, start, end, false); > #endif > =20 > __radix__flush_tlb_range(vma->vm_mm, start, end); > @@ -1151,9 +1151,6 @@ void radix__flush_all_lpid_guest(unsigned int lpi= d) > _tlbie_lpid_guest(lpid, RIC_FLUSH_ALL); > } > =20 > -static void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, uns= igned long start, > - unsigned long end, int psize); > - > void radix__tlb_flush(struct mmu_gather *tlb) > { > int psize =3D 0; > @@ -1177,10 +1174,8 @@ void radix__tlb_flush(struct mmu_gather *tlb) > else > radix__flush_all_mm(mm); > } else { > - if (!tlb->freed_tables) > - radix__flush_tlb_range_psize(mm, start, end, psize); > - else > - radix__flush_tlb_pwc_range_psize(mm, start, end, psize); > + radix__flush_tlb_pwc_range_psize(mm, start, > + end, psize, tlb->freed_tables); > } > } > =20 > @@ -1260,10 +1255,10 @@ void radix__flush_tlb_range_psize(struct mm_str= uct *mm, unsigned long start, > return __radix__flush_tlb_range_psize(mm, start, end, psize, false); > } > =20 > -static void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, uns= igned long start, > - unsigned long end, int psize) > +void radix__flush_tlb_pwc_range_psize(struct mm_struct *mm, unsigned l= ong start, > + unsigned long end, int psize, bool also_pwc) > { > - __radix__flush_tlb_range_psize(mm, start, end, psize, true); > + __radix__flush_tlb_range_psize(mm, start, end, psize, also_pwc); > } > =20 > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > @@ -1315,9 +1310,11 @@ void radix__flush_tlb_collapsed_pmd(struct mm_st= ruct *mm, unsigned long addr) > #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > =20 > void radix__flush_pmd_tlb_range(struct vm_area_struct *vma, > - unsigned long start, unsigned long end) > + unsigned long start, unsigned long end, > + bool also_pwc) > { > - radix__flush_tlb_range_psize(vma->vm_mm, start, end, MMU_PAGE_2M); > + __radix__flush_tlb_range_psize(vma->vm_mm, start, > + end, MMU_PAGE_2M, also_pwc); > } > EXPORT_SYMBOL(radix__flush_pmd_tlb_range); > =20 >=20