lkml.org 
[lkml]   [2018]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 065/410] perf evlist: Introduce perf_evlist__new_dummy constructor
    3.16.57-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    commit 5bae0250237f7a5ec4355f9920701de247b8db91 upstream.

    For case where all we need is an evlist with just an "dummy" evsel,
    like in some 'perf test' entries.

    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/n/tip-q52le0pblm2k3ncvyilelr9z@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    tools/perf/util/evlist.c | 28 ++++++++++++++++++++++++++++
    tools/perf/util/evlist.h | 3 +++
    2 files changed, 31 insertions(+)

    --- a/tools/perf/util/evlist.c
    +++ b/tools/perf/util/evlist.c
    @@ -62,6 +62,18 @@ struct perf_evlist *perf_evlist__new_def
    return evlist;
    }

    +struct perf_evlist *perf_evlist__new_dummy(void)
    +{
    + struct perf_evlist *evlist = perf_evlist__new();
    +
    + if (evlist && perf_evlist__add_dummy(evlist)) {
    + perf_evlist__delete(evlist);
    + evlist = NULL;
    + }
    +
    + return evlist;
    +}
    +
    /**
    * perf_evlist__set_id_pos - set the positions of event ids.
    * @evlist: selected event list
    @@ -188,6 +200,22 @@ error:
    return -ENOMEM;
    }

    +int perf_evlist__add_dummy(struct perf_evlist *evlist)
    +{
    + struct perf_event_attr attr = {
    + .type = PERF_TYPE_SOFTWARE,
    + .config = PERF_COUNT_SW_DUMMY,
    + .size = sizeof(attr), /* to capture ABI version */
    + };
    + struct perf_evsel *evsel = perf_evsel__new(&attr);
    +
    + if (evsel == NULL)
    + return -ENOMEM;
    +
    + perf_evlist__add(evlist, evsel);
    + return 0;
    +}
    +
    static int perf_evlist__add_attrs(struct perf_evlist *evlist,
    struct perf_event_attr *attrs, size_t nr_attrs)
    {
    --- a/tools/perf/util/evlist.h
    +++ b/tools/perf/util/evlist.h
    @@ -54,6 +54,7 @@ struct perf_evsel_str_handler {

    struct perf_evlist *perf_evlist__new(void);
    struct perf_evlist *perf_evlist__new_default(void);
    +struct perf_evlist *perf_evlist__new_dummy(void);
    void perf_evlist__init(struct perf_evlist *evlist, struct cpu_map *cpus,
    struct thread_map *threads);
    void perf_evlist__exit(struct perf_evlist *evlist);
    @@ -67,6 +68,8 @@ int __perf_evlist__add_default_attrs(str
    #define perf_evlist__add_default_attrs(evlist, array) \
    __perf_evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array))

    +int perf_evlist__add_dummy(struct perf_evlist *evlist);
    +
    int perf_evlist__add_newtp(struct perf_evlist *evlist,
    const char *sys, const char *name, void *handler);

    \
     
     \ /
      Last update: 2018-06-07 17:20    [W:4.241 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site