lkml.org 
[lkml]   [2015]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 51/57] perf script: Process cpu/threads maps
    Date
    Adding processing of cpu/threads maps. Configuring session's
    evlist with these maps.

    Link: http://lkml.kernel.org/n/tip-s3txa1u2qv3bi8uspp4hi7al@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/builtin-script.c | 67 +++++++++++++++++++++++++++++++++++++++++++++
    1 file changed, 67 insertions(+)

    diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
    index 2653c0273b89..651ac9edf870 100644
    --- a/tools/perf/builtin-script.c
    +++ b/tools/perf/builtin-script.c
    @@ -18,7 +18,11 @@
    #include "util/sort.h"
    #include "util/data.h"
    #include "util/auxtrace.h"
    +#include "util/cpumap.h"
    +#include "util/thread_map.h"
    +#include "util/stat.h"
    #include <linux/bitmap.h>
    +#include "asm/bug.h"

    static char const *script_name;
    static char const *generate_script_lang;
    @@ -659,6 +663,9 @@ struct perf_script {
    bool show_task_events;
    bool show_mmap_events;
    bool show_switch_events;
    + bool allocated;
    + struct cpu_map *cpus;
    + struct thread_map *threads;
    };

    static int process_attr(struct perf_tool *tool, union perf_event *event,
    @@ -1615,6 +1622,63 @@ static void script__setup_sample_type(struct perf_script *script)
    }
    }

    +static int set_maps(struct perf_script *script)
    +{
    + struct perf_evlist *evlist = script->session->evlist;
    +
    + if (!script->cpus || !script->threads)
    + return 0;
    +
    + if (WARN_ONCE(script->allocated, "stats double allocation\n"))
    + return -EINVAL;
    +
    + perf_evlist__set_maps(evlist, script->cpus, script->threads);
    +
    + if (perf_evlist__alloc_stats(evlist, true))
    + return -ENOMEM;
    +
    + script->allocated = true;
    + return 0;
    +}
    +
    +static
    +int process_thread_map_event(struct perf_tool *tool,
    + union perf_event *event,
    + struct perf_session *session __maybe_unused)
    +{
    + struct perf_script *script = container_of(tool, struct perf_script, tool);
    +
    + if (script->threads) {
    + pr_warning("Extra thread map event, ignoring.\n");
    + return 0;
    + }
    +
    + script->threads = thread_map__new_event(&event->thread_map);
    + if (!script->threads)
    + return -ENOMEM;
    +
    + return set_maps(script);
    +}
    +
    +static
    +int process_cpu_map_event(struct perf_tool *tool __maybe_unused,
    + union perf_event *event,
    + struct perf_session *session __maybe_unused)
    +{
    + struct perf_script *script = container_of(tool, struct perf_script, tool);
    +
    + if (script->cpus) {
    + pr_warning("Extra cpu map event, ignoring.\n");
    + return 0;
    + }
    +
    + script->cpus = cpu_map__new_data(&event->cpu_map.data);
    + if (!script->cpus)
    + return -ENOMEM;
    +
    + return set_maps(script);
    +}
    +
    int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
    {
    bool show_full_info = false;
    @@ -1643,6 +1707,8 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
    .auxtrace_info = perf_event__process_auxtrace_info,
    .auxtrace = perf_event__process_auxtrace,
    .auxtrace_error = perf_event__process_auxtrace_error,
    + .thread_map = process_thread_map_event,
    + .cpu_map = process_cpu_map_event,
    .ordered_events = true,
    .ordering_requires_timestamps = true,
    },
    @@ -1996,6 +2062,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
    flush_scripting();

    out_delete:
    + perf_evlist__free_stats(session->evlist);
    perf_session__delete(session);

    if (script_started)
    --
    2.4.3


    \
     
     \ /
      Last update: 2015-10-16 13:01    [W:4.067 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site