Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S938825AbdD1LsP (ORCPT ); Fri, 28 Apr 2017 07:48:15 -0400 Received: from foss.arm.com ([217.140.101.70]:47820 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S968401AbdD1Lro (ORCPT ); Fri, 28 Apr 2017 07:47:44 -0400 From: Mark Rutland To: linux-kernel@vger.kernel.org Cc: acme@kernel.org, alexander.shishkin@linux.intel.com, ganapatrao.kulkarni@cavium.com, mark.rutland@arm.com Subject: [PATCH 1/2] perf evsel: add per{cpu,thread} close helpers Date: Fri, 28 Apr 2017 12:47:09 +0100 Message-Id: <1493380030-4683-2-git-send-email-mark.rutland@arm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1493380030-4683-1-git-send-email-mark.rutland@arm.com> References: <1493380030-4683-1-git-send-email-mark.rutland@arm.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3172 Lines: 89 We have perf_evsel__open_per_{cpu,thread}() helpers for opening events, but we have no corresponding helpers for closing events. This results in callers having to duplicate logic to determine the number of cpus and threads when closing an event, and makes it harder than necessary to determine whether open/close are correctly balanced. This patch adds new perf_evsel__close_per_{cpu,thread}() helpers, which can be paired with their open counterpart. A subsequent patch will make use of these. For consistency, the functions are shuffled in evsel.c so that the per-{cpu,thread} variants of open/close immediately follow their respective common implementation. Signed-off-by: Mark Rutland Cc: Arnaldo Carvalho de Melo Cc: Alexander Shishkin Cc: linux-kernel@vger.kernel.org --- tools/perf/util/evsel.c | 26 ++++++++++++++++++++------ tools/perf/util/evsel.h | 4 ++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 0e87909..27abed8 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1682,6 +1682,18 @@ int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus, return err; } +int perf_evsel__open_per_cpu(struct perf_evsel *evsel, + struct cpu_map *cpus) +{ + return perf_evsel__open(evsel, cpus, NULL); +} + +int perf_evsel__open_per_thread(struct perf_evsel *evsel, + struct thread_map *threads) +{ + return perf_evsel__open(evsel, NULL, threads); +} + void perf_evsel__close(struct perf_evsel *evsel, int ncpus, int nthreads) { if (evsel->fd == NULL) @@ -1691,16 +1703,18 @@ void perf_evsel__close(struct perf_evsel *evsel, int ncpus, int nthreads) perf_evsel__free_fd(evsel); } -int perf_evsel__open_per_cpu(struct perf_evsel *evsel, - struct cpu_map *cpus) +void perf_evsel__close_per_cpu(struct perf_evsel *evsel, + struct cpu_map *cpus) { - return perf_evsel__open(evsel, cpus, NULL); + int ncpus = cpus ? cpus->nr : 1; + perf_evsel__close(evsel, ncpus, 1); } -int perf_evsel__open_per_thread(struct perf_evsel *evsel, - struct thread_map *threads) +void perf_evsel__close_per_thread(struct perf_evsel *evsel, + struct thread_map *threads) { - return perf_evsel__open(evsel, NULL, threads); + int nthreads = threads ? threads->nr : 1; + perf_evsel__close(evsel, 1, nthreads); } static int perf_evsel__parse_id_sample(const struct perf_evsel *evsel, diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index d101695..6f61a49 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -257,6 +257,10 @@ int perf_evsel__open_per_thread(struct perf_evsel *evsel, struct thread_map *threads); int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus, struct thread_map *threads); +void perf_evsel__close_per_cpu(struct perf_evsel *evsel, + struct cpu_map *cpus); +void perf_evsel__close_per_thread(struct perf_evsel *evsel, + struct thread_map *threads); void perf_evsel__close(struct perf_evsel *evsel, int ncpus, int nthreads); struct perf_sample; -- 1.9.1