From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754045AbbLKPMk (ORCPT ); Fri, 11 Dec 2015 10:12:40 -0500 Received: from casper.infradead.org ([85.118.1.10]:49044 "EHLO casper.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751787AbbLKPMj (ORCPT ); Fri, 11 Dec 2015 10:12:39 -0500 Date: Fri, 11 Dec 2015 16:12:29 +0100 From: Peter Zijlstra To: Alexander Shishkin Cc: Ingo Molnar , linux-kernel@vger.kernel.org, vince@deater.net, eranian@google.com, Arnaldo Carvalho de Melo , Mathieu Poirier Subject: Re: [PATCH v0 3/5] perf: Introduce instruction trace filtering Message-ID: <20151211151229.GW6356@twins.programming.kicks-ass.net> References: <1449840998-29902-1-git-send-email-alexander.shishkin@linux.intel.com> <1449840998-29902-4-git-send-email-alexander.shishkin@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1449840998-29902-4-git-send-email-alexander.shishkin@linux.intel.com> User-Agent: Mutt/1.5.21 (2012-12-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Dec 11, 2015 at 03:36:36PM +0200, Alexander Shishkin wrote: > +/* > + * Scan through mm's vmas and see if one of them matches the > + * @filter; if so, adjust filter's address range. > + * Called with mm::mmap_sem down for reading. > + */ > +static int perf_itrace_filter_apply(struct perf_event *event, > + struct perf_itrace_filter *filter, > + struct mm_struct *mm) > +{ > + struct vm_area_struct *vma; lockdep_assert_held(&mm->mmap_sem); If you want to be pedantic we could add: lockdep_assert_held_shared() lockdep_assert_held_exclusive() to assert we hold it in any particular state. > + > + for (vma = mm->mmap; vma->vm_next; vma = vma->vm_next) { > + struct file *file = vma->vm_file; > + unsigned long off = vma->vm_pgoff << PAGE_SHIFT; > + unsigned long vma_size = vma->vm_end - vma->vm_start; > + > + if (!file) > + continue; > + > + if (!perf_itrace_filter_match(filter, file, off, > + vma_size)) > + continue; > + > + filter->start = vma->vm_start + filter->offset; > + filter->end = vma->vm_start + filter->offset + > + filter->size; > + > + return 1; > + } > + > + return 0; > +}