Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1255493

[PATCH 09/52] perf tools: Add cpu_map__new_event function

From Jiri Olsa <jolsa@kernel.org>
Newsgroups linux.kernel
Subject [PATCH 09/52] perf tools: Add cpu_map__new_event function
Date 2015-10-25 16:20 +0100
Message-ID <qnvfs-4Bx-9@gated-at.bofh.it> (permalink)
References <qnuW5-4fF-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Introducing cpu_map__new_event function to create
struct cpu_map object from cpu_map event.

Link: http://lkml.kernel.org/n/tip-tepv49tbjsqeprmf8k05lc6r@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/tests/cpumap.c | 25 +++++++++++++++++++++----
 tools/perf/util/cpumap.c  | 42 ++++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/cpumap.h  |  1 +
 3 files changed, 64 insertions(+), 4 deletions(-)

diff --git a/tools/perf/tests/cpumap.c b/tools/perf/tests/cpumap.c
index dc923ec7688f..cf67c7b07be2 100644
--- a/tools/perf/tests/cpumap.c
+++ b/tools/perf/tests/cpumap.c
@@ -6,12 +6,13 @@ static int process_event_mask(struct perf_tool *tool __maybe_unused,
 			 struct perf_sample *sample __maybe_unused,
 			 struct machine *machine __maybe_unused)
 {
-	struct cpu_map_event *map = &event->cpu_map;
+	struct cpu_map_event *map_event = &event->cpu_map;
 	struct cpu_map_data_mask *mask;
 	struct cpu_map_data *data;
+	struct cpu_map *map;
 	int i;
 
-	data = &map->data;
+	data = &map_event->data;
 
 	TEST_ASSERT_VAL("wrong type", data->type == PERF_CPU_MAP__MASK);
 
@@ -23,6 +24,14 @@ static int process_event_mask(struct perf_tool *tool __maybe_unused,
 		TEST_ASSERT_VAL("wrong cpu", test_bit(i, mask->mask));
 	}
 
+	map = cpu_map__new_data(data);
+	TEST_ASSERT_VAL("wrong nr",  map->nr == 20);
+
+	for (i = 0; i < 20; i++) {
+		TEST_ASSERT_VAL("wrong cpu", map->map[i] == i);
+	}
+
+	cpu_map__put(map);
 	return 0;
 }
 
@@ -31,11 +40,12 @@ static int process_event_cpus(struct perf_tool *tool __maybe_unused,
 			 struct perf_sample *sample __maybe_unused,
 			 struct machine *machine __maybe_unused)
 {
-	struct cpu_map_event *map = &event->cpu_map;
+	struct cpu_map_event *map_event = &event->cpu_map;
 	struct cpu_map_data_cpus *cpus;
 	struct cpu_map_data *data;
+	struct cpu_map *map;
 
-	data = &map->data;
+	data = &map_event->data;
 
 	TEST_ASSERT_VAL("wrong type", data->type == PERF_CPU_MAP__CPUS);
 
@@ -44,6 +54,13 @@ static int process_event_cpus(struct perf_tool *tool __maybe_unused,
 	TEST_ASSERT_VAL("wrong nr",   cpus->nr == 2);
 	TEST_ASSERT_VAL("wrong cpu",  cpus->cpu[0] == 1);
 	TEST_ASSERT_VAL("wrong cpu",  cpus->cpu[1] == 256);
+
+	map = cpu_map__new_data(data);
+	TEST_ASSERT_VAL("wrong nr",  map->nr == 2);
+	TEST_ASSERT_VAL("wrong cpu", map->map[0] == 1);
+	TEST_ASSERT_VAL("wrong cpu", map->map[1] == 256);
+	TEST_ASSERT_VAL("wrong refcnt", atomic_read(&map->refcnt) == 1);
+	cpu_map__put(map);
 	return 0;
 }
 
diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c
index 10af1e7524fb..00eb4e0c438b 100644
--- a/tools/perf/util/cpumap.c
+++ b/tools/perf/util/cpumap.c
@@ -5,6 +5,7 @@
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <linux/bitmap.h>
 #include "asm/bug.h"
 
 static struct cpu_map *cpu_map__default_new(void)
@@ -179,6 +180,47 @@ out:
 	return cpus;
 }
 
+static struct cpu_map *cpu_map__from_cpus(struct cpu_map_data_cpus *cpus)
+{
+	struct cpu_map *map;
+
+	map = cpu_map__empty_new(cpus->nr);
+	if (map) {
+		unsigned i;
+
+		for (i = 0; i < cpus->nr; i++)
+			map->map[i] = (int) cpus->cpu[i];
+	}
+
+	return map;
+}
+
+static struct cpu_map *cpu_map__from_mask(struct cpu_map_data_mask *mask)
+{
+	struct cpu_map *map;
+	int nr, nbits = mask->nr * mask->long_size * BITS_PER_BYTE;
+
+	nr = bitmap_weight(mask->mask, nbits);
+
+	map = cpu_map__empty_new(nr);
+	if (map) {
+		int cpu, i = 0;
+
+		for_each_set_bit(cpu, mask->mask, nbits)
+			map->map[i++] = cpu;
+	}
+	return map;
+
+}
+
+struct cpu_map *cpu_map__new_data(struct cpu_map_data *data)
+{
+	if (data->type == PERF_CPU_MAP__CPUS)
+		return cpu_map__from_cpus((struct cpu_map_data_cpus *) data->data);
+	else
+		return cpu_map__from_mask((struct cpu_map_data_mask *) data->data);
+}
+
 size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp)
 {
 	int i;
diff --git a/tools/perf/util/cpumap.h b/tools/perf/util/cpumap.h
index 85f7772457fa..71c41b9efabb 100644
--- a/tools/perf/util/cpumap.h
+++ b/tools/perf/util/cpumap.h
@@ -17,6 +17,7 @@ struct cpu_map {
 struct cpu_map *cpu_map__new(const char *cpu_list);
 struct cpu_map *cpu_map__empty_new(int nr);
 struct cpu_map *cpu_map__dummy_new(void);
+struct cpu_map *cpu_map__new_data(struct cpu_map_data *data);
 struct cpu_map *cpu_map__read(FILE *file);
 size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp);
 int cpu_map__get_socket_id(int cpu);
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCHv5 00/52] perf stat: Add scripting support Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 22/52] perf tools: Add event_update event scale type Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 04/52] perf tools: Add thread_map event sythesize function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 43/52] perf stat report: Process event update events Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 12/52] perf tools: Add stat config event synthesize function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 52/52] perf script: Add stat-cpi.py script Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 45/52] perf stat report: Allow to override aggr_mode Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 49/52] perf script: Add stat default handlers Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 39/52] perf stat report: Process cpu/threads maps Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 26/52] perf report: Display newly added events in raw dump Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 18/52] perf tools: Add stat round event synthesize function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 06/52] perf tools: Add perf_event__fprintf_thread_map function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 47/52] perf script: Process stat config event Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 02/52] perf stat: Cache aggregated map entries in extra cpumap Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
    [tip:perf/core] perf stat:   Cache aggregated map entries in extra cpumap tip-bot for Jiri Olsa <tipbot@zytor.com> - 2015-10-29 10:50 +0100
  [PATCH 16/52] perf tools: Add stat event read function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 38/52] perf stat report: Add report command Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 34/52] perf stat record: Write stat events on record Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 44/52] perf stat report: Move csv_sep initialization before report command Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 05/52] perf tools: Add thread_map__new_event function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 08/52] perf tools: Add cpu_map event synthesize function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 14/52] perf tools: Add stat event Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:00 +0100
  [PATCH 27/52] perf tools: Introduce stat feature Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 17/52] perf tools: Add stat round event Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 25/52] perf tools: Add perf_event__fprintf_event_update function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 11/52] perf tools: Add stat config event Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
    Re: [PATCH 11/52] perf tools: Add stat config event Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-27 14:20 +0100
      Re: [PATCH 11/52] perf tools: Add stat config event Jiri Olsa <jolsa@redhat.com> - 2015-10-27 14:40 +0100
        Re: [PATCH 11/52] perf tools: Add stat config event Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-27 14:50 +0100
          Re: [PATCH 11/52] perf tools: Add stat config event Jiri Olsa <jolsa@redhat.com> - 2015-10-27 15:00 +0100
            Re: [PATCH 11/52] perf tools: Add stat config event Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-27 15:20 +0100
  [PATCH 13/52] perf tools: Add stat config event read function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 28/52] perf tools: Move id_offset out of struct perf_evsel union Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
    [tip:perf/core] perf evsel:   Move id_offset out of struct perf_evsel union member tip-bot for Jiri Olsa <tipbot@zytor.com> - 2015-10-29 10:50 +0100
  [PATCH 15/52] perf tools: Add stat event synthesize function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 35/52] perf stat record: Write stat round events on record Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 24/52] perf tools: Add event_update event cpus type Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 21/52] perf tools: Add event_update event unit type Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 31/52] perf stat record: Synthesize stat record data Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
    Re: [PATCH 31/52] perf stat record: Synthesize stat record data Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-27 15:50 +0100
      Re: [PATCH 31/52] perf stat record: Synthesize stat record data Jiri Olsa <jolsa@redhat.com> - 2015-10-28 13:20 +0100
      Re: [PATCH 31/52] perf stat record: Synthesize stat record data Jiri Olsa <jolsa@redhat.com> - 2015-10-28 14:10 +0100
      Re: [PATCH 31/52] perf stat record: Synthesize stat record data Jiri Olsa <jolsa@redhat.com> - 2015-10-28 14:10 +0100
  [PATCH 36/52] perf stat record: Do not allow record with multiple runs mode Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 19/52] perf tools: Add stat events fprintf functions Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 40/52] perf stat report: Process stat config event Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 41/52] perf stat report: Add support to initialize aggr_map from file Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 33/52] perf stat record: Add pipe support for record command Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 30/52] perf stat record: Initialize record features Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 23/52] perf tools: Add event_update event name type Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 37/52] perf stat record: Synthesize event update events Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:10 +0100
  [PATCH 09/52] perf tools: Add cpu_map__new_event function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:20 +0100
  [PATCH 03/52] perf tools: Add thread_map event Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:20 +0100
    Re: [PATCH 03/52] perf tools: Add thread_map event Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-26 18:50 +0100
      Re: [PATCH 03/52] perf tools: Add thread_map event Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-26 18:50 +0100
        Re: [PATCH 03/52] perf tools: Add thread_map event Jiri Olsa <jolsa@redhat.com> - 2015-10-26 19:00 +0100
          Re: [PATCH 03/52] perf tools: Add thread_map event Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-26 19:00 +0100
      Re: [PATCH 03/52] perf tools: Add thread_map event Jiri Olsa <jolsa@redhat.com> - 2015-10-26 18:50 +0100
  [PATCH 07/52] perf tools: Add cpu_map event Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:20 +0100
  [PATCH 01/52] perf cpu_map: Add cpu_map__empty_new function Jiri Olsa <jolsa@kernel.org> - 2015-10-25 16:20 +0100
    [tip:perf/core] perf cpu_map: Add cpu_map__empty_new function tip-bot for Jiri Olsa <tipbot@zytor.com> - 2015-10-29 10:50 +0100
  Re: [PATCHv5 00/52] perf stat: Add scripting support Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-26 18:40 +0100
    RE: [PATCHv5 00/52] perf stat: Add scripting support "Liang, Kan" <kan.liang@intel.com> - 2015-10-27 15:30 +0100
      Re: [PATCHv5 00/52] perf stat: Add scripting support Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-10-27 15:50 +0100

csiph-web