From mboxrd@z Thu Jan 1 00:00:00 1970 From: Leonardo Bras Subject: [PATCH v5 05/11] powerpc/perf: Applies counting method to monitor lockless pgtbl walks Date: Wed, 2 Oct 2019 22:33:19 -0300 Message-ID: <20191003013325.2614-6-leonardo@linux.ibm.com> References: <20191003013325.2614-1-leonardo@linux.ibm.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20191003013325.2614-1-leonardo@linux.ibm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, kvm-ppc@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org Cc: Song Liu , Michal Hocko , "Peter Zijlstra (Intel)" , "Dmitry V. Levin" , Keith Busch , Paul Mackerras , Christoph Lameter , Ira Weiny , Thomas Gleixner , Elena Reshetova , Andrea Arcangeli , Santosh Sivaraj , Davidlohr Bueso , "Aneesh Kumar K.V" , Bartlomiej Zolnierkiewicz , Mike Rapoport , Jason Gunthorpe , Allison Randal , Mahesh Salgaonkar , Leonardo Bras , Alexey Dobriyan , Ingo Molnar , Ralph Campbell List-Id: linux-arch.vger.kernel.org Applies the counting-based method for monitoring lockless pgtable walks on read_user_stack_slow. local_irq_{save,restore} is already inside {begin,end}_lockless_pgtbl_walk, so there is no need to repeat it here. Variable that saves the irq mask was renamed from flags to irq_mask so it doesn't lose meaning now it's not directly passed to local_irq_* functions. Signed-off-by: Leonardo Bras --- arch/powerpc/perf/callchain.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/perf/callchain.c b/arch/powerpc/perf/callchain.c index c84bbd4298a0..43e49d8be344 100644 --- a/arch/powerpc/perf/callchain.c +++ b/arch/powerpc/perf/callchain.c @@ -116,14 +116,14 @@ static int read_user_stack_slow(void __user *ptr, void *buf, int nb) unsigned shift; unsigned long addr = (unsigned long) ptr; unsigned long offset; - unsigned long pfn, flags; + unsigned long pfn, irq_mask; void *kaddr; pgdir = current->mm->pgd; if (!pgdir) return -EFAULT; - local_irq_save(flags); + irq_mask = begin_lockless_pgtbl_walk(current->mm); ptep = find_current_mm_pte(pgdir, addr, NULL, &shift); if (!ptep) goto err_out; @@ -145,7 +145,7 @@ static int read_user_stack_slow(void __user *ptr, void *buf, int nb) memcpy(buf, kaddr + offset, nb); ret = 0; err_out: - local_irq_restore(flags); + end_lockless_pgtbl_walk(current->mm, irq_mask); return ret; } -- 2.20.1