From patchwork Thu Sep 7 14:51:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 811061 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xp3TY5HLCz9s81 for ; Fri, 8 Sep 2017 00:57:37 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NmjH8Wfz"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3xp3TY47NdzDrWl for ; Fri, 8 Sep 2017 00:57:37 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NmjH8Wfz"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:400e:c00::242; helo=mail-pf0-x242.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="NmjH8Wfz"; dkim-atps=neutral Received: from mail-pf0-x242.google.com (mail-pf0-x242.google.com [IPv6:2607:f8b0:400e:c00::242]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3xp3MT298KzDrXg for ; Fri, 8 Sep 2017 00:52:21 +1000 (AEST) Received: by mail-pf0-x242.google.com with SMTP id h4so1228396pfk.0 for ; Thu, 07 Sep 2017 07:52:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+ZPfAMcqXapAjldd/laEzBZTdN/wbTO5QIQ9HBhCkQI=; b=NmjH8Wfz668NU1Lr7uFplWcr79NM3opLoKSoVOJMOp6aMGj5YotGFNf1Il8rDLy+oe TYvNpj2ACXQEX15LJ/cPk+18QYiWv2GUilKUdUbPfBckdr88TNwnDJEZUM1SpDAWG0Uz 6eNuDtnygZvr6iusF3nV2BYkYWX40FxLjxfw+O7IR7f7aThaN9mJ2VrYI9bt4zTet4tc JgyWN68Ew6FL8ixQHJVYy4syM1Jnd4zfJeeGoydo30hF5+/NsaKJKr1Hgdq8Oo6sd/aJ Onu3rEKdpRES2R8lfMjudL9V7iIalRFjxPvQpT/6fpyQGHr/1WaKpA+rcLAgR1yI124o jzBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+ZPfAMcqXapAjldd/laEzBZTdN/wbTO5QIQ9HBhCkQI=; b=QCH9kTpEhRkcx7LhAOGBTGjCNwgmSU3gq7hsp1SWCOAERBgMt2fJWfT1HOo6PRaPmj 4YSFfeOunEqQuV1ys+MrIJB0X8asW+68O1gKBxoSl6pzO5DB7isGZGCOuaE5R4l1yjk2 xKx54Zjve1S5MlaNfU6KzkFl+0CYahhpe4M4pPA3ZnSWsApdYVczsWth9Ty0akj2aRgk pU4/jkp6CccpjsEBJhDmxYF5+r4lxgBazIoq5wMQpMPxdPq04i01k2I0qx34YxaqxDQL foyfwCms8oqkHzDy/t3H9n99wN9pxCI848oZzhzcmWAcTZb2mvScrsCab7fNR8cKTnW7 xPMQ== X-Gm-Message-State: AHPjjUiEtVNUH3ix0EctYKIcpkwERXrS+CPzTWJ8ZrDtpGeL/X6i+rmE MhUDfiZiBdrEcgA2 X-Google-Smtp-Source: ADKCNb40y624lVjDeMQfzwvn34BN+OckAcxTgwcUsBubehQzcKsSTPmwLPV4D+jsVFk6WCWphN/qpQ== X-Received: by 10.84.133.73 with SMTP id 67mr3289301plf.378.1504795939200; Thu, 07 Sep 2017 07:52:19 -0700 (PDT) Received: from roar.au.ibm.com (203-219-56-202.tpgi.com.au. [203.219.56.202]) by smtp.gmail.com with ESMTPSA id a6sm4642791pfa.76.2017.09.07.07.52.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Sep 2017 07:52:18 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [RFC PATCH 2/8] powerpc/64s/radix: tlbie improve preempt handling Date: Fri, 8 Sep 2017 00:51:42 +1000 Message-Id: <20170907145148.24398-3-npiggin@gmail.com> X-Mailer: git-send-email 2.13.3 In-Reply-To: <20170907145148.24398-1-npiggin@gmail.com> References: <20170907145148.24398-1-npiggin@gmail.com> X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Aneesh Kumar K . V" , Nicholas Piggin , Anton Blanchard Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Preempt should be consistently disabled for mm_is_thread_local tests, so bring the rest of these under preempt_disable(). Preempt does not need to be disabled for the mm->context.id tests, which allows simplification and removal of gotos. Signed-off-by: Nicholas Piggin --- arch/powerpc/mm/tlb-radix.c | 47 +++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/arch/powerpc/mm/tlb-radix.c b/arch/powerpc/mm/tlb-radix.c index b3e849c4886e..1ed61baf58da 100644 --- a/arch/powerpc/mm/tlb-radix.c +++ b/arch/powerpc/mm/tlb-radix.c @@ -186,16 +186,15 @@ void radix__flush_tlb_mm(struct mm_struct *mm) { unsigned long pid; - preempt_disable(); pid = mm->context.id; if (unlikely(pid == MMU_NO_CONTEXT)) - goto no_context; + return; + preempt_disable(); if (!mm_is_thread_local(mm)) _tlbie_pid(pid, RIC_FLUSH_TLB); else _tlbiel_pid(pid, RIC_FLUSH_TLB); -no_context: preempt_enable(); } EXPORT_SYMBOL(radix__flush_tlb_mm); @@ -204,16 +203,15 @@ static void radix__flush_all_mm(struct mm_struct *mm) { unsigned long pid; - preempt_disable(); pid = mm->context.id; if (unlikely(pid == MMU_NO_CONTEXT)) - goto no_context; + return; + preempt_disable(); if (!mm_is_thread_local(mm)) _tlbie_pid(pid, RIC_FLUSH_ALL); else _tlbiel_pid(pid, RIC_FLUSH_ALL); -no_context: preempt_enable(); } @@ -229,15 +227,14 @@ void radix__flush_tlb_page_psize(struct mm_struct *mm, unsigned long vmaddr, unsigned long pid; unsigned long ap = mmu_get_ap(psize); - preempt_disable(); pid = mm ? mm->context.id : 0; if (unlikely(pid == MMU_NO_CONTEXT)) - goto bail; + return; + preempt_disable(); if (!mm_is_thread_local(mm)) _tlbie_va(vmaddr, pid, ap, RIC_FLUSH_TLB); else _tlbiel_va(vmaddr, pid, ap, RIC_FLUSH_TLB); -bail: preempt_enable(); } @@ -322,46 +319,44 @@ void radix__flush_tlb_range_psize(struct mm_struct *mm, unsigned long start, { unsigned long pid; unsigned long addr; - int local = mm_is_thread_local(mm); + bool local; unsigned long ap = mmu_get_ap(psize); unsigned long page_size = 1UL << mmu_psize_defs[psize].shift; - - preempt_disable(); pid = mm ? mm->context.id : 0; if (unlikely(pid == MMU_NO_CONTEXT)) - goto err_out; + return; + preempt_disable(); + local = mm_is_thread_local(mm); if (end == TLB_FLUSH_ALL || (end - start) > tlb_single_page_flush_ceiling * page_size) { if (local) _tlbiel_pid(pid, RIC_FLUSH_TLB); else _tlbie_pid(pid, RIC_FLUSH_TLB); - goto err_out; - } - for (addr = start; addr < end; addr += page_size) { + } else { + for (addr = start; addr < end; addr += page_size) { - if (local) - _tlbiel_va(addr, pid, ap, RIC_FLUSH_TLB); - else - _tlbie_va(addr, pid, ap, RIC_FLUSH_TLB); + if (local) + _tlbiel_va(addr, pid, ap, RIC_FLUSH_TLB); + else + _tlbie_va(addr, pid, ap, RIC_FLUSH_TLB); + } } -err_out: preempt_enable(); } #ifdef CONFIG_TRANSPARENT_HUGEPAGE void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, unsigned long addr) { - int local = mm_is_thread_local(mm); unsigned long ap = mmu_get_ap(mmu_virtual_psize); unsigned long pid, end; - + bool local; pid = mm ? mm->context.id : 0; if (unlikely(pid == MMU_NO_CONTEXT)) - goto no_context; + return; /* 4k page size, just blow the world */ if (PAGE_SIZE == 0x1000) { @@ -369,6 +364,8 @@ void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, unsigned long addr) return; } + preempt_disable(); + local = mm_is_thread_local(mm); /* Otherwise first do the PWC */ if (local) _tlbiel_pid(pid, RIC_FLUSH_PWC); @@ -383,7 +380,7 @@ void radix__flush_tlb_collapsed_pmd(struct mm_struct *mm, unsigned long addr) else _tlbie_va(addr, pid, ap, RIC_FLUSH_TLB); } -no_context: + preempt_enable(); } #endif /* CONFIG_TRANSPARENT_HUGEPAGE */