All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>, Thomas Gleixner <tglx@linutronix.de>
Cc: Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
	Clark Williams <williams@redhat.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Michael Petlan <mpetlan@redhat.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 23/66] libperf: Add perf_mmap struct
Date: Wed, 25 Sep 2019 21:32:01 -0300	[thread overview]
Message-ID: <20190926003244.13962-24-acme@kernel.org> (raw)
In-Reply-To: <20190926003244.13962-1-acme@kernel.org>

From: Jiri Olsa <jolsa@kernel.org>

Add the perf_mmap struct to libperf.

The definition is added into:

  include/internal/mmap.h

which is not to be included by users, but shared within perf and
libperf.

Committer notes:

Remove unnecessary includes from tools/perf/lib/include/internal/mmap.h,
those will be readded as they become necessary, later in the series.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lore.kernel.org/lkml/20190913132355.21634-11-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/x86/tests/perf-time-to-tsc.c |  2 +-
 tools/perf/arch/x86/util/intel-bts.c         |  2 +-
 tools/perf/arch/x86/util/intel-pt.c          |  2 +-
 tools/perf/builtin-record.c                  | 14 ++++++-------
 tools/perf/lib/include/internal/mmap.h       | 14 +++++++++++++
 tools/perf/util/mmap.c                       | 22 ++++++++++----------
 tools/perf/util/mmap.h                       |  7 ++++---
 7 files changed, 39 insertions(+), 24 deletions(-)
 create mode 100644 tools/perf/lib/include/internal/mmap.h

diff --git a/tools/perf/arch/x86/tests/perf-time-to-tsc.c b/tools/perf/arch/x86/tests/perf-time-to-tsc.c
index e1dd5f8894ba..bd404db94b3a 100644
--- a/tools/perf/arch/x86/tests/perf-time-to-tsc.c
+++ b/tools/perf/arch/x86/tests/perf-time-to-tsc.c
@@ -93,7 +93,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe
 
 	CHECK__(evlist__mmap(evlist, UINT_MAX));
 
-	pc = evlist->mmap[0].base;
+	pc = evlist->mmap[0].core.base;
 	ret = perf_read_tsc_conversion(pc, &tc);
 	if (ret) {
 		if (ret == -EOPNOTSUPP) {
diff --git a/tools/perf/arch/x86/util/intel-bts.c b/tools/perf/arch/x86/util/intel-bts.c
index 64b409dad6e2..130925141369 100644
--- a/tools/perf/arch/x86/util/intel-bts.c
+++ b/tools/perf/arch/x86/util/intel-bts.c
@@ -78,7 +78,7 @@ static int intel_bts_info_fill(struct auxtrace_record *itr,
 	if (!session->evlist->nr_mmaps)
 		return -EINVAL;
 
-	pc = session->evlist->mmap[0].base;
+	pc = session->evlist->mmap[0].core.base;
 	if (pc) {
 		err = perf_read_tsc_conversion(pc, &tc);
 		if (err) {
diff --git a/tools/perf/arch/x86/util/intel-pt.c b/tools/perf/arch/x86/util/intel-pt.c
index 6c139611d231..34d7118bf390 100644
--- a/tools/perf/arch/x86/util/intel-pt.c
+++ b/tools/perf/arch/x86/util/intel-pt.c
@@ -355,7 +355,7 @@ static int intel_pt_info_fill(struct auxtrace_record *itr,
 	if (!session->evlist->nr_mmaps)
 		return -EINVAL;
 
-	pc = session->evlist->mmap[0].base;
+	pc = session->evlist->mmap[0].core.base;
 	if (pc) {
 		err = perf_read_tsc_conversion(pc, &tc);
 		if (err) {
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 1bb3d91c6599..2520c0212275 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -261,7 +261,7 @@ static int record__aio_pushfn(struct mmap *map, void *to, void *buf, size_t size
 	struct record_aio *aio = to;
 
 	/*
-	 * map->base data pointed by buf is copied into free map->aio.data[] buffer
+	 * map->core.base data pointed by buf is copied into free map->aio.data[] buffer
 	 * to release space in the kernel buffer as fast as possible, calling
 	 * perf_mmap__consume() from perf_mmap__push() function.
 	 *
@@ -360,7 +360,7 @@ static void record__aio_mmap_read_sync(struct record *rec)
 	for (i = 0; i < evlist->nr_mmaps; i++) {
 		struct mmap *map = &maps[i];
 
-		if (map->base)
+		if (map->core.base)
 			record__aio_sync(map, true);
 	}
 }
@@ -970,7 +970,7 @@ static int record__mmap_read_evlist(struct record *rec, struct evlist *evlist,
 		u64 flush = 0;
 		struct mmap *map = &maps[i];
 
-		if (map->base) {
+		if (map->core.base) {
 			record__adjust_affinity(rec, map);
 			if (synch) {
 				flush = map->flush;
@@ -1198,10 +1198,10 @@ static const struct perf_event_mmap_page *
 perf_evlist__pick_pc(struct evlist *evlist)
 {
 	if (evlist) {
-		if (evlist->mmap && evlist->mmap[0].base)
-			return evlist->mmap[0].base;
-		if (evlist->overwrite_mmap && evlist->overwrite_mmap[0].base)
-			return evlist->overwrite_mmap[0].base;
+		if (evlist->mmap && evlist->mmap[0].core.base)
+			return evlist->mmap[0].core.base;
+		if (evlist->overwrite_mmap && evlist->overwrite_mmap[0].core.base)
+			return evlist->overwrite_mmap[0].core.base;
 	}
 	return NULL;
 }
diff --git a/tools/perf/lib/include/internal/mmap.h b/tools/perf/lib/include/internal/mmap.h
new file mode 100644
index 000000000000..2ef051901f48
--- /dev/null
+++ b/tools/perf/lib/include/internal/mmap.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __LIBPERF_INTERNAL_MMAP_H
+#define __LIBPERF_INTERNAL_MMAP_H
+
+/**
+ * struct perf_mmap - perf's ring buffer mmap details
+ *
+ * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this
+ */
+struct perf_mmap {
+	void		*base;
+};
+
+#endif /* __LIBPERF_INTERNAL_MMAP_H */
diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c
index f3b7c8b0fa90..76190b2edd78 100644
--- a/tools/perf/util/mmap.c
+++ b/tools/perf/util/mmap.c
@@ -31,7 +31,7 @@ size_t perf_mmap__mmap_len(struct mmap *map)
 static union perf_event *perf_mmap__read(struct mmap *map,
 					 u64 *startp, u64 end)
 {
-	unsigned char *data = map->base + page_size;
+	unsigned char *data = map->core.base + page_size;
 	union perf_event *event = NULL;
 	int diff = end - *startp;
 
@@ -116,7 +116,7 @@ void perf_mmap__get(struct mmap *map)
 
 void perf_mmap__put(struct mmap *map)
 {
-	BUG_ON(map->base && refcount_read(&map->refcnt) == 0);
+	BUG_ON(map->core.base && refcount_read(&map->refcnt) == 0);
 
 	if (refcount_dec_and_test(&map->refcnt))
 		perf_mmap__munmap(map);
@@ -317,9 +317,9 @@ void perf_mmap__munmap(struct mmap *map)
 		munmap(map->data, perf_mmap__mmap_len(map));
 		map->data = NULL;
 	}
-	if (map->base != NULL) {
-		munmap(map->base, perf_mmap__mmap_len(map));
-		map->base = NULL;
+	if (map->core.base != NULL) {
+		munmap(map->core.base, perf_mmap__mmap_len(map));
+		map->core.base = NULL;
 		map->fd = -1;
 		refcount_set(&map->refcnt, 0);
 	}
@@ -370,12 +370,12 @@ int perf_mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, int cpu)
 	refcount_set(&map->refcnt, 2);
 	map->prev = 0;
 	map->mask = mp->mask;
-	map->base = mmap(NULL, perf_mmap__mmap_len(map), mp->prot,
+	map->core.base = mmap(NULL, perf_mmap__mmap_len(map), mp->prot,
 			 MAP_SHARED, fd, 0);
-	if (map->base == MAP_FAILED) {
+	if (map->core.base == MAP_FAILED) {
 		pr_debug2("failed to mmap perf event ring buffer, error %d\n",
 			  errno);
-		map->base = NULL;
+		map->core.base = NULL;
 		return -1;
 	}
 	map->fd = fd;
@@ -399,7 +399,7 @@ int perf_mmap__mmap(struct mmap *map, struct mmap_params *mp, int fd, int cpu)
 	}
 
 	if (auxtrace_mmap__mmap(&map->auxtrace_mmap,
-				&mp->auxtrace_mp, map->base, fd))
+				&mp->auxtrace_mp, map->core.base, fd))
 		return -1;
 
 	return perf_mmap__aio_mmap(map, mp);
@@ -444,7 +444,7 @@ static int __perf_mmap__read_init(struct mmap *md)
 {
 	u64 head = perf_mmap__read_head(md);
 	u64 old = md->prev;
-	unsigned char *data = md->base + page_size;
+	unsigned char *data = md->core.base + page_size;
 	unsigned long size;
 
 	md->start = md->overwrite ? head : old;
@@ -489,7 +489,7 @@ int perf_mmap__push(struct mmap *md, void *to,
 		    int push(struct mmap *map, void *to, void *buf, size_t size))
 {
 	u64 head = perf_mmap__read_head(md);
-	unsigned char *data = md->base + page_size;
+	unsigned char *data = md->core.base + page_size;
 	unsigned long size;
 	void *buf;
 	int rc = 0;
diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h
index ab086ede044a..d2f0ce581e2c 100644
--- a/tools/perf/util/mmap.h
+++ b/tools/perf/util/mmap.h
@@ -1,6 +1,7 @@
 #ifndef __PERF_MMAP_H
 #define __PERF_MMAP_H 1
 
+#include <internal/mmap.h>
 #include <linux/compiler.h>
 #include <linux/refcount.h>
 #include <linux/types.h>
@@ -20,7 +21,7 @@ struct aiocb;
  * @refcnt - e.g. code using PERF_EVENT_IOC_SET_OUTPUT to share this
  */
 struct mmap {
-	void		 *base;
+	struct perf_mmap	core;
 	int		 mask;
 	int		 fd;
 	int		 cpu;
@@ -60,12 +61,12 @@ void perf_mmap__consume(struct mmap *map);
 
 static inline u64 perf_mmap__read_head(struct mmap *mm)
 {
-	return ring_buffer_read_head(mm->base);
+	return ring_buffer_read_head(mm->core.base);
 }
 
 static inline void perf_mmap__write_tail(struct mmap *md, u64 tail)
 {
-	ring_buffer_write_tail(md->base, tail);
+	ring_buffer_write_tail(md->core.base, tail);
 }
 
 union perf_event *perf_mmap__read_forward(struct mmap *map);
-- 
2.21.0

  parent reply	other threads:[~2019-09-26  0:32 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-26  0:31 [GIT PULL] perf/core improvements and fixes Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 01/66] perf record: Fix priv level with branch sampling for paranoid=2 Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 02/66] perf record: Move restricted maps check to after a possible fallback to not collect kernel samples Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 03/66] perf vendor events amd: Add L3 cache events for Family 17h Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 04/66] perf vendor events amd: Remove redundant '[' Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 05/66] perf vendor events: Minor fixes to the README Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 06/66] perf list: Allow plurals for metric, metricgroup Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 07/66] libtraceevent: Round up in tep_print_event() time precision Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 08/66] libtraceevent: Man pages for libtraceevent event print related API Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 09/66] libtraceevent: Man pages fix, rename tep_ref_get() to tep_get_ref() Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 10/66] libtraceevent: Man pages fix, changes in event printing APIs Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 11/66] libtraceevent: Add tep_get_event() in event-parse.h Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 12/66] libtraceevent: Move traceevent plugins in its own subdirectory Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 13/66] libtraceevent: Man pages for tep plugins APIs Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 14/66] tools: Add missing stdio.h include to asm/bug.h header Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 15/66] perf tools: Rename 'struct perf_mmap' to 'struct mmap' Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 16/66] perf tools: Rename perf_evlist__mmap() to evlist__mmap() Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 17/66] perf tools: Rename perf_evlist__munmap() to evlist__munmap() Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 18/66] perf tools: Rename perf_evlist__alloc_mmap() to evlist__alloc_mmap() Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 19/66] perf tools: Rename perf_evlist__exit() to evlist__exit() Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 20/66] perf tools: Rename perf_evlist__purge() to evlist__purge() Arnaldo Carvalho de Melo
2019-09-26  0:31 ` [PATCH 21/66] libperf: Link libapi.a in libperf.so Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 22/66] perf evlist: Adopt backwards ring buffer state enum Arnaldo Carvalho de Melo
2019-09-26  0:32 ` Arnaldo Carvalho de Melo [this message]
2019-09-26  0:32 ` [PATCH 24/66] libperf: Add 'mask' to struct perf_mmap Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 25/66] libperf: Add 'fd' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 26/66] libperf: Add 'cpu' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 27/66] libperf: Add 'refcnt' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 28/66] libperf: Add prev/start/end " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 29/66] libperf: Add 'overwrite' to 'struct perf_mmap' Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 30/66] libperf: Add 'event_copy' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 31/66] libperf: Add 'flush' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 32/66] libperf: Move 'system_wide' from 'struct evsel' to 'struct perf_evsel' Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 33/66] libperf: Move 'nr_mmaps' from 'struct evlist' to 'struct perf_evlist' Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 34/66] libperf: Move 'mmap_len' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 35/66] libperf: Move 'pollfd' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 36/66] libperf: Add missing 'struct xyarray' forward declaration Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 37/66] libperf: Move 'sample_id' from 'struct evsel' to 'struct perf_evsel' Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 38/66] libperf: Move 'id' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 39/66] libperf: Move 'ids' " Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 40/66] libperf: Move 'heads' from 'struct evlist' to 'struct perf_evlist' Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 41/66] libperf: Add perf_evsel__alloc_id/perf_evsel__free_id functions Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 42/66] libperf: Add perf_evlist__first()/last() functions Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 43/66] libperf: Add perf_evlist__read_format() function Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 44/66] libperf: Add perf_evlist__id_add() function Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 45/66] libperf: Add perf_evlist__id_add_fd() function Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 46/66] libperf: Move 'page_size' global variable to libperf Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 47/66] perf tools: No need to include internal/lib.h from util/util.h Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 48/66] libperf: Use sys/types.h to get ssize_t, not unistd.h Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 49/66] libperf: Add libperf dependency for tests targets Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 50/66] libperf: Merge libperf_set_print() into libperf_init() Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 51/66] libperf: Add libperf_init() call to the tests Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 52/66] libperf: Add perf_evlist__alloc_pollfd() function Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 53/66] libperf: Add perf_evlist__add_pollfd() function Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 54/66] libperf: Add perf_evlist__poll() function Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 55/66] perf copyfile: Move copyfile routines to separate files Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 56/66] perf evsel: Remove need for symbol_conf in evsel_fprintf.c Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 57/66] perf evsel: Introduce evsel_fprintf.h Arnaldo Carvalho de Melo
2019-09-26 11:15   ` Jiri Olsa
2019-09-26 15:06     ` Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 58/66] perf evlist: Remove unused perf_evlist__fprintf() method Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 59/66] perf evsel: Move config terms to a separate header Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 60/66] perf tools: Replace needless mmap.h with what is needed, event.h Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 61/66] perf stat: Fix free memory access / memory leaks in metrics Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 62/66] perf evlist: Fix access of freed id arrays Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 63/66] perf vendor events: Remove P8 HW events which are not supported Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 64/66] perf jvmti: Include JVMTI support for s390 Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 65/66] perf build: Add detection of java-11-openjdk-devel package Arnaldo Carvalho de Melo
2019-09-26  0:32 ` [PATCH 66/66] perf parser: Remove needless include directives Arnaldo Carvalho de Melo
2019-09-26  5:55 ` [GIT PULL] perf/core improvements and fixes Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190926003244.13962-24-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mpetlan@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=williams@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.