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 41/66] libperf: Add perf_evsel__alloc_id/perf_evsel__free_id functions
Date: Wed, 25 Sep 2019 21:32:19 -0300	[thread overview]
Message-ID: <20190926003244.13962-42-acme@kernel.org> (raw)
In-Reply-To: <20190926003244.13962-1-acme@kernel.org>

From: Jiri Olsa <jolsa@kernel.org>

Add perf_evsel__alloc_id()/perf_evsel__free_id() functions to libperf as
internal functions.

Move 'struct perf_sample_id' to internal/evsel.h header and change
'struct perf_sample_id::evsel' to 'struct perf_evsel' and the related
code that touches it.

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-28-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/lib/evsel.c                  | 30 +++++++++++++++++++++
 tools/perf/lib/include/internal/evsel.h | 27 +++++++++++++++++++
 tools/perf/tests/event_update.c         |  2 +-
 tools/perf/util/evlist.c                | 10 +++----
 tools/perf/util/evsel.c                 | 36 +++----------------------
 tools/perf/util/evsel.h                 | 25 -----------------
 tools/perf/util/header.c                |  4 +--
 tools/perf/util/session.c               |  4 ++-
 8 files changed, 71 insertions(+), 67 deletions(-)

diff --git a/tools/perf/lib/evsel.c b/tools/perf/lib/evsel.c
index 24abc80dd767..a8cb582e2721 100644
--- a/tools/perf/lib/evsel.c
+++ b/tools/perf/lib/evsel.c
@@ -230,3 +230,33 @@ struct perf_event_attr *perf_evsel__attr(struct perf_evsel *evsel)
 {
 	return &evsel->attr;
 }
+
+int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads)
+{
+	if (ncpus == 0 || nthreads == 0)
+		return 0;
+
+	if (evsel->system_wide)
+		nthreads = 1;
+
+	evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id));
+	if (evsel->sample_id == NULL)
+		return -ENOMEM;
+
+	evsel->id = zalloc(ncpus * nthreads * sizeof(u64));
+	if (evsel->id == NULL) {
+		xyarray__delete(evsel->sample_id);
+		evsel->sample_id = NULL;
+		return -ENOMEM;
+	}
+
+	return 0;
+}
+
+void perf_evsel__free_id(struct perf_evsel *evsel)
+{
+	xyarray__delete(evsel->sample_id);
+	evsel->sample_id = NULL;
+	zfree(&evsel->id);
+	evsel->ids = 0;
+}
diff --git a/tools/perf/lib/include/internal/evsel.h b/tools/perf/lib/include/internal/evsel.h
index 385766f06591..a69b8299c36f 100644
--- a/tools/perf/lib/include/internal/evsel.h
+++ b/tools/perf/lib/include/internal/evsel.h
@@ -5,11 +5,35 @@
 #include <linux/types.h>
 #include <linux/perf_event.h>
 #include <stdbool.h>
+#include <sys/types.h>
 
 struct perf_cpu_map;
 struct perf_thread_map;
 struct xyarray;
 
+/*
+ * Per fd, to map back from PERF_SAMPLE_ID to evsel, only used when there are
+ * more than one entry in the evlist.
+ */
+struct perf_sample_id {
+	struct hlist_node	 node;
+	u64			 id;
+	struct perf_evsel	*evsel;
+       /*
+	* 'idx' will be used for AUX area sampling. A sample will have AUX area
+	* data that will be queued for decoding, where there are separate
+	* queues for each CPU (per-cpu tracing) or task (per-thread tracing).
+	* The sample ID can be used to lookup 'idx' which is effectively the
+	* queue number.
+	*/
+	int			 idx;
+	int			 cpu;
+	pid_t			 tid;
+
+	/* Holds total ID period value for PERF_SAMPLE_READ processing. */
+	u64			 period;
+};
+
 struct perf_evsel {
 	struct list_head	 node;
 	struct perf_event_attr	 attr;
@@ -32,4 +56,7 @@ void perf_evsel__free_fd(struct perf_evsel *evsel);
 int perf_evsel__read_size(struct perf_evsel *evsel);
 int perf_evsel__apply_filter(struct perf_evsel *evsel, const char *filter);
 
+int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads);
+void perf_evsel__free_id(struct perf_evsel *evsel);
+
 #endif /* __LIBPERF_INTERNAL_EVSEL_H */
diff --git a/tools/perf/tests/event_update.c b/tools/perf/tests/event_update.c
index 0497d900ced2..cf4f90170f90 100644
--- a/tools/perf/tests/event_update.c
+++ b/tools/perf/tests/event_update.c
@@ -95,7 +95,7 @@ int test__event_update(struct test *test __maybe_unused, int subtest __maybe_unu
 	evsel = perf_evlist__first(evlist);
 
 	TEST_ASSERT_VAL("failed to allocate ids",
-			!perf_evsel__alloc_id(evsel, 1, 1));
+			!perf_evsel__alloc_id(&evsel->core, 1, 1));
 
 	perf_evlist__id_add(evlist, evsel, 0, 0, 123);
 
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index c6af7c622612..559db38594a8 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -469,7 +469,7 @@ static void perf_evlist__id_hash(struct evlist *evlist,
 	struct perf_sample_id *sid = SID(evsel, cpu, thread);
 
 	sid->id = id;
-	sid->evsel = evsel;
+	sid->evsel = &evsel->core;
 	hash = hash_64(sid->id, PERF_EVLIST__HLIST_BITS);
 	hlist_add_head(&sid->node, &evlist->core.heads[hash]);
 }
@@ -563,7 +563,7 @@ struct evsel *perf_evlist__id2evsel(struct evlist *evlist, u64 id)
 
 	sid = perf_evlist__id2sid(evlist, id);
 	if (sid)
-		return sid->evsel;
+		return container_of(sid->evsel, struct evsel, core);
 
 	if (!perf_evlist__sample_id_all(evlist))
 		return perf_evlist__first(evlist);
@@ -581,7 +581,7 @@ struct evsel *perf_evlist__id2evsel_strict(struct evlist *evlist,
 
 	sid = perf_evlist__id2sid(evlist, id);
 	if (sid)
-		return sid->evsel;
+		return container_of(sid->evsel, struct evsel, core);
 
 	return NULL;
 }
@@ -635,7 +635,7 @@ struct evsel *perf_evlist__event2evsel(struct evlist *evlist,
 
 	hlist_for_each_entry(sid, head, node) {
 		if (sid->id == id)
-			return sid->evsel;
+			return container_of(sid->evsel, struct evsel, core);
 	}
 	return NULL;
 }
@@ -1018,7 +1018,7 @@ int evlist__mmap_ex(struct evlist *evlist, unsigned int pages,
 	evlist__for_each_entry(evlist, evsel) {
 		if ((evsel->core.attr.read_format & PERF_FORMAT_ID) &&
 		    evsel->core.sample_id == NULL &&
-		    perf_evsel__alloc_id(evsel, perf_cpu_map__nr(cpus), threads->nr) < 0)
+		    perf_evsel__alloc_id(&evsel->core, perf_cpu_map__nr(cpus), threads->nr) < 0)
 			return -ENOMEM;
 	}
 
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 55638eb9299c..a4a492f11849 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1227,36 +1227,6 @@ int evsel__disable(struct evsel *evsel)
 	return err;
 }
 
-int perf_evsel__alloc_id(struct evsel *evsel, int ncpus, int nthreads)
-{
-	if (ncpus == 0 || nthreads == 0)
-		return 0;
-
-	if (evsel->core.system_wide)
-		nthreads = 1;
-
-	evsel->core.sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id));
-	if (evsel->core.sample_id == NULL)
-		return -ENOMEM;
-
-	evsel->core.id = zalloc(ncpus * nthreads * sizeof(u64));
-	if (evsel->core.id == NULL) {
-		xyarray__delete(evsel->core.sample_id);
-		evsel->core.sample_id = NULL;
-		return -ENOMEM;
-	}
-
-	return 0;
-}
-
-static void perf_evsel__free_id(struct evsel *evsel)
-{
-	xyarray__delete(evsel->core.sample_id);
-	evsel->core.sample_id = NULL;
-	zfree(&evsel->core.id);
-	evsel->core.ids = 0;
-}
-
 static void perf_evsel__free_config_terms(struct evsel *evsel)
 {
 	struct perf_evsel_config_term *term, *h;
@@ -1273,7 +1243,7 @@ void perf_evsel__exit(struct evsel *evsel)
 	assert(evsel->evlist == NULL);
 	perf_evsel__free_counts(evsel);
 	perf_evsel__free_fd(&evsel->core);
-	perf_evsel__free_id(evsel);
+	perf_evsel__free_id(&evsel->core);
 	perf_evsel__free_config_terms(evsel);
 	cgroup__put(evsel->cgrp);
 	perf_cpu_map__put(evsel->core.cpus);
@@ -1992,7 +1962,7 @@ int evsel__open(struct evsel *evsel, struct perf_cpu_map *cpus,
 void evsel__close(struct evsel *evsel)
 {
 	perf_evsel__close(&evsel->core);
-	perf_evsel__free_id(evsel);
+	perf_evsel__free_id(&evsel->core);
 }
 
 int perf_evsel__open_per_cpu(struct evsel *evsel,
@@ -2706,7 +2676,7 @@ int perf_evsel__store_ids(struct evsel *evsel, struct evlist *evlist)
 	struct perf_cpu_map *cpus = evsel->core.cpus;
 	struct perf_thread_map *threads = evsel->core.threads;
 
-	if (perf_evsel__alloc_id(evsel, cpus->nr, threads->nr))
+	if (perf_evsel__alloc_id(&evsel->core, cpus->nr, threads->nr))
 		return -ENOMEM;
 
 	return store_evsel_ids(evsel, evlist);
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index ed64395ec340..a5b29ac10da0 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -17,29 +17,6 @@ struct addr_location;
 struct evsel;
 union perf_event;
 
-/*
- * Per fd, to map back from PERF_SAMPLE_ID to evsel, only used when there are
- * more than one entry in the evlist.
- */
-struct perf_sample_id {
-	struct hlist_node 	node;
-	u64		 	id;
-	struct evsel		*evsel;
-       /*
-	* 'idx' will be used for AUX area sampling. A sample will have AUX area
-	* data that will be queued for decoding, where there are separate
-	* queues for each CPU (per-cpu tracing) or task (per-thread tracing).
-	* The sample ID can be used to lookup 'idx' which is effectively the
-	* queue number.
-	*/
-	int			idx;
-	int			cpu;
-	pid_t			tid;
-
-	/* Holds total ID period value for PERF_SAMPLE_READ processing. */
-	u64			period;
-};
-
 struct cgroup;
 
 /*
@@ -272,8 +249,6 @@ const char *perf_evsel__name(struct evsel *evsel);
 const char *perf_evsel__group_name(struct evsel *evsel);
 int perf_evsel__group_desc(struct evsel *evsel, char *buf, size_t size);
 
-int perf_evsel__alloc_id(struct evsel *evsel, int ncpus, int nthreads);
-
 void __perf_evsel__set_sample_bit(struct evsel *evsel,
 				  enum perf_event_sample_format bit);
 void __perf_evsel__reset_sample_bit(struct evsel *evsel,
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 498f6a825656..fc5eac41e102 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -3609,7 +3609,7 @@ int perf_session__read_header(struct perf_session *session)
 		 * for allocating the perf_sample_id table we fake 1 cpu and
 		 * hattr->ids threads.
 		 */
-		if (perf_evsel__alloc_id(evsel, 1, nr_ids))
+		if (perf_evsel__alloc_id(&evsel->core, 1, nr_ids))
 			goto out_delete_evlist;
 
 		lseek(fd, f_attr.ids.offset, SEEK_SET);
@@ -3750,7 +3750,7 @@ int perf_event__process_attr(struct perf_tool *tool __maybe_unused,
 	 * for allocating the perf_sample_id table we fake 1 cpu and
 	 * hattr->ids threads.
 	 */
-	if (perf_evsel__alloc_id(evsel, 1, n_ids))
+	if (perf_evsel__alloc_id(&evsel->core, 1, n_ids))
 		return -ENOMEM;
 
 	for (i = 0; i < n_ids; i++) {
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index a621c73bad42..84a30ff3968a 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -1324,6 +1324,7 @@ static int deliver_sample_value(struct evlist *evlist,
 				struct machine *machine)
 {
 	struct perf_sample_id *sid = perf_evlist__id2sid(evlist, v->id);
+	struct evsel *evsel;
 
 	if (sid) {
 		sample->id     = v->id;
@@ -1343,7 +1344,8 @@ static int deliver_sample_value(struct evlist *evlist,
 	if (!sample->period)
 		return 0;
 
-	return tool->sample(tool, event, sample, sid->evsel, machine);
+	evsel = container_of(sid->evsel, struct evsel, core);
+	return tool->sample(tool, event, sample, evsel, machine);
 }
 
 static int deliver_sample_group(struct evlist *evlist,
-- 
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 ` [PATCH 23/66] libperf: Add perf_mmap struct Arnaldo Carvalho de Melo
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 ` Arnaldo Carvalho de Melo [this message]
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-42-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.