Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp5653920pxu; Thu, 22 Oct 2020 07:54:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwFGdcpFdG0TEFCjMmMOQau64CWWoXFQ/FJ3tdsK8rmK/q4kggy9v+arWz5VArYXREJy9ku X-Received: by 2002:a05:6402:3184:: with SMTP id di4mr2698260edb.362.1603378473984; Thu, 22 Oct 2020 07:54:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603378473; cv=none; d=google.com; s=arc-20160816; b=JanxHY59S66xiXgWJ2D0QaLpP4IYVtO9jEhZ4V8LjrZd07Mz3ffqi3Wfe2SbXcTHO/ wxmQ+SuOkpqURiyau5VcxuYbM1aG6O7ThivdOgeS+ZGinPfUAPx/0RjujtIc2tPuE0ko YKM+dSOTqLBfr3nAgfd5tLUUTTKk+wBBZ+RH0umRmryfwjFuo1sOU4aW9UO/4Rvyamgq 0/5e54SkBoLpNdOacd7HxGl2tGsvKeM9lgg5q55nta6wrYVVTPT5LX8qLjY+hzNz1Rnf bEBkOmYHzadKYjzRu8pRpUj2nBIgPwPQ4jyky0qsCAXKmhpzqzr0Ix83FCighNaIZOx6 VGrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:date:cc:to:subject:from:references:in-reply-to :message-id; bh=+YU5jy8rFORnPim2LOtxiRozMMOZdRqn9mLTQYXA6HE=; b=kfX0IqqC/5Xj4SxdxyML/yumui/oiUEAnUxi4WnJT582nA0c+cAaj0pmW/fuYSq2PA kPOFhoXV1fWUSFkEoufC5tZ/AL0zlxAyN28wRKgPB9gNUZb1lD9wcni/xZ3aQiITfEzf D2jO+uwr6c0Z7I4oXwdZLpsVkScQHtJOU1w5+xyeYrQtQ0KL7IhHAtClpN8/c0Gd2IEL QDNNBAiPtVjbgvwCBvKrLUQOJYt4+DEHVQSO0VbcvItGncJ8eauN/+Awuw9QJMoisSjw reexnt0wRR4EwBE6k+fPR9F32cq/IOjFdgDWVeV7O2djCyZmspmuhsZ99amJ0hO5D6+m 5Ccg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k3si1070341eji.109.2020.10.22.07.54.11; Thu, 22 Oct 2020 07:54:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2508338AbgJVGa3 (ORCPT + 99 others); Thu, 22 Oct 2020 02:30:29 -0400 Received: from pegase1.c-s.fr ([93.17.236.30]:13624 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2503646AbgJVG3l (ORCPT ); Thu, 22 Oct 2020 02:29:41 -0400 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4CGyBp30qbz9vBLP; Thu, 22 Oct 2020 08:29:38 +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 owKUCXMAVhwl; Thu, 22 Oct 2020 08:29:38 +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 4CGyBp1rQfz9vBKl; Thu, 22 Oct 2020 08:29:38 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 1544C8B806; Thu, 22 Oct 2020 08:29:39 +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 ODAbJO45zN92; Thu, 22 Oct 2020 08:29:38 +0200 (CEST) Received: from po17688vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id C60058B805; Thu, 22 Oct 2020 08:29:38 +0200 (CEST) Received: by po17688vm.idsi0.si.c-s.fr (Postfix, from userid 0) id AAFC4667EF; Thu, 22 Oct 2020 06:29:38 +0000 (UTC) Message-Id: <132ab19aae52abc8e06ab524ec86d4229b5b9c3d.1603348103.git.christophe.leroy@csgroup.eu> In-Reply-To: <648e2448e938d52d0b5887445e018ca584edc06d.1603348103.git.christophe.leroy@csgroup.eu> References: <648e2448e938d52d0b5887445e018ca584edc06d.1603348103.git.christophe.leroy@csgroup.eu> From: Christophe Leroy Subject: [PATCH v1 13/20] powerpc/32s: Split and inline flush_range() To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Thu, 22 Oct 2020 06:29:38 +0000 (UTC) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org flush_range() handle both the MMU_FTR_HPTE_TABLE case and the other case. The non MMU_FTR_HPTE_TABLE case is trivial as it is only a call to _tlbie()/_tlbia() which is not worth a dedicated function. Make flush_range() a hash specific and call it from tlbflush.h based on mmu_has_feature(MMU_FTR_HPTE_TABLE). Signed-off-by: Christophe Leroy --- arch/powerpc/include/asm/book3s/32/tlbflush.h | 13 ++++++++++++- arch/powerpc/mm/book3s32/tlb.c | 13 +++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/32/tlbflush.h b/arch/powerpc/include/asm/book3s/32/tlbflush.h index 2f480d184526..42708c1719d6 100644 --- a/arch/powerpc/include/asm/book3s/32/tlbflush.h +++ b/arch/powerpc/include/asm/book3s/32/tlbflush.h @@ -8,7 +8,7 @@ */ void hash__flush_tlb_mm(struct mm_struct *mm); void hash__flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr); -void flush_range(struct mm_struct *mm, unsigned long start, unsigned long end); +void hash__flush_range(struct mm_struct *mm, unsigned long start, unsigned long end); #ifdef CONFIG_SMP void _tlbie(unsigned long address); @@ -20,6 +20,17 @@ static inline void _tlbie(unsigned long address) #endif void _tlbia(void); +static inline void flush_range(struct mm_struct *mm, unsigned long start, unsigned long end) +{ + start &= PAGE_MASK; + if (mmu_has_feature(MMU_FTR_HPTE_TABLE)) + hash__flush_range(mm, start, end); + else if (end - start <= PAGE_SIZE) + _tlbie(start); + else + _tlbia(); +} + static inline void flush_tlb_mm(struct mm_struct *mm) { if (mmu_has_feature(MMU_FTR_HPTE_TABLE)) diff --git a/arch/powerpc/mm/book3s32/tlb.c b/arch/powerpc/mm/book3s32/tlb.c index f9b8e1ce4371..f0edbad5966c 100644 --- a/arch/powerpc/mm/book3s32/tlb.c +++ b/arch/powerpc/mm/book3s32/tlb.c @@ -76,7 +76,7 @@ void tlb_flush(struct mmu_gather *tlb) * and check _PAGE_HASHPTE bit; if it is set, find and destroy * the corresponding HPTE. */ -void flush_range(struct mm_struct *mm, unsigned long start, unsigned long end) +void hash__flush_range(struct mm_struct *mm, unsigned long start, unsigned long end) { pmd_t *pmd; unsigned long pmd_end; @@ -84,13 +84,6 @@ void flush_range(struct mm_struct *mm, unsigned long start, unsigned long end) unsigned int ctx = mm->context.id; start &= PAGE_MASK; - if (!mmu_has_feature(MMU_FTR_HPTE_TABLE)) { - if (end - start <= PAGE_SIZE) - _tlbie(start); - else - _tlbia(); - return; - } if (start >= end) return; end = (end - 1) | ~PAGE_MASK; @@ -109,7 +102,7 @@ void flush_range(struct mm_struct *mm, unsigned long start, unsigned long end) ++pmd; } } -EXPORT_SYMBOL(flush_range); +EXPORT_SYMBOL(hash__flush_range); /* * Flush all the (user) entries for the address space described by mm. @@ -125,7 +118,7 @@ void hash__flush_tlb_mm(struct mm_struct *mm) * but it seems dup_mmap is the only SMP case which gets here. */ for (mp = mm->mmap; mp != NULL; mp = mp->vm_next) - flush_range(mp->vm_mm, mp->vm_start, mp->vm_end); + hash__flush_range(mp->vm_mm, mp->vm_start, mp->vm_end); } EXPORT_SYMBOL(hash__flush_tlb_mm); -- 2.25.0