From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751577AbbJBFX0 (ORCPT ); Fri, 2 Oct 2015 01:23:26 -0400 Received: from mail-pa0-f43.google.com ([209.85.220.43]:35033 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751511AbbJBFXS (ORCPT ); Fri, 2 Oct 2015 01:23:18 -0400 From: Namhyung Kim To: Arnaldo Carvalho de Melo Cc: Ingo Molnar , Peter Zijlstra , Jiri Olsa , LKML , Frederic Weisbecker , Stephane Eranian , David Ahern , Andi Kleen , Adrian Hunter Subject: [RFC/PATCH 03/38] perf tools: Move auxtrace_mmap field to struct perf_evlist Date: Fri, 2 Oct 2015 14:18:44 +0900 Message-Id: <1443763159-29098-4-git-send-email-namhyung@kernel.org> X-Mailer: git-send-email 2.6.0 In-Reply-To: <1443763159-29098-1-git-send-email-namhyung@kernel.org> References: <1443763159-29098-1-git-send-email-namhyung@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since it's gonna share struct mmap with dummy tracking evsel to track meta events only, let's move auxtrace out of struct perf_mmap. Cc: Adrian Hunter Signed-off-by: Namhyung Kim --- tools/perf/builtin-record.c | 4 ++-- tools/perf/util/evlist.c | 30 +++++++++++++++++++++--------- tools/perf/util/evlist.h | 2 +- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 5e01c070dbf2..0accac6e0812 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -220,7 +220,7 @@ static int record__auxtrace_read_snapshot_all(struct record *rec) for (i = 0; i < rec->evlist->nr_mmaps; i++) { struct auxtrace_mmap *mm = - &rec->evlist->mmap[i].auxtrace_mmap; + &rec->evlist->auxtrace_mmap[i]; if (!mm->base) continue; @@ -405,7 +405,7 @@ static int record__mmap_read_all(struct record *rec) int rc = 0; for (i = 0; i < rec->evlist->nr_mmaps; i++) { - struct auxtrace_mmap *mm = &rec->evlist->mmap[i].auxtrace_mmap; + struct auxtrace_mmap *mm = &rec->evlist->auxtrace_mmap[i]; if (rec->evlist->mmap[i].base) { if (record__mmap_read(rec, i) != 0) { diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index e46adcd5b408..042dffc67986 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -810,9 +810,12 @@ union perf_event *perf_evlist__mmap_read(struct perf_evlist *evlist, int idx) return event; } -static bool perf_mmap__empty(struct perf_mmap *md) +static bool perf_evlist__mmap_empty(struct perf_evlist *evlist, int idx) { - return perf_mmap__read_head(md) == md->prev && !md->auxtrace_mmap.base; + struct perf_mmap *md = &evlist->mmap[idx]; + + return perf_mmap__read_head(md) == md->prev && + evlist->auxtrace_mmap[idx].base == NULL; } static void perf_evlist__mmap_get(struct perf_evlist *evlist, int idx) @@ -838,7 +841,7 @@ void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx) perf_mmap__write_tail(md, old); } - if (atomic_read(&md->refcnt) == 1 && perf_mmap__empty(md)) + if (atomic_read(&md->refcnt) == 1 && perf_evlist__mmap_empty(evlist, idx)) perf_evlist__mmap_put(evlist, idx); } @@ -879,7 +882,7 @@ static void __perf_evlist__munmap(struct perf_evlist *evlist, int idx) evlist->mmap[idx].base = NULL; atomic_set(&evlist->mmap[idx].refcnt, 0); } - auxtrace_mmap__munmap(&evlist->mmap[idx].auxtrace_mmap); + auxtrace_mmap__munmap(&evlist->auxtrace_mmap[idx]); } void perf_evlist__munmap(struct perf_evlist *evlist) @@ -901,7 +904,15 @@ static int perf_evlist__alloc_mmap(struct perf_evlist *evlist) if (cpu_map__empty(evlist->cpus)) evlist->nr_mmaps = thread_map__nr(evlist->threads); evlist->mmap = zalloc(evlist->nr_mmaps * sizeof(struct perf_mmap)); - return evlist->mmap != NULL ? 0 : -ENOMEM; + if (evlist->mmap == NULL) + return -ENOMEM; + evlist->auxtrace_mmap = calloc(evlist->nr_mmaps, + sizeof(struct auxtrace_mmap)); + if (evlist->auxtrace_mmap == NULL) { + zfree(&evlist->mmap); + return -ENOMEM; + } + return 0; } struct mmap_params { @@ -938,10 +949,6 @@ static int __perf_evlist__mmap(struct perf_evlist *evlist, int idx, return -1; } - if (auxtrace_mmap__mmap(&evlist->mmap[idx].auxtrace_mmap, - &mp->auxtrace_mp, evlist->mmap[idx].base, fd)) - return -1; - return 0; } @@ -963,6 +970,11 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, *output = fd; if (__perf_evlist__mmap(evlist, idx, mp, *output) < 0) return -1; + + if (auxtrace_mmap__mmap(&evlist->auxtrace_mmap[idx], + &mp->auxtrace_mp, + evlist->mmap[idx].base, fd)) + return -1; } else { if (ioctl(fd, PERF_EVENT_IOC_SET_OUTPUT, *output) != 0) return -1; diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 414e383885f5..51574ce8ac69 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -30,7 +30,6 @@ struct perf_mmap { int mask; atomic_t refcnt; u64 prev; - struct auxtrace_mmap auxtrace_mmap; char event_copy[PERF_SAMPLE_MAX_SIZE] __attribute__((aligned(8))); }; @@ -53,6 +52,7 @@ struct perf_evlist { } workload; struct fdarray pollfd; struct perf_mmap *mmap; + struct auxtrace_mmap *auxtrace_mmap; struct thread_map *threads; struct cpu_map *cpus; struct perf_evsel *selected; -- 2.6.0