lkml.org 
[lkml]   [2014]   [Oct]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/32] perf tools: Set thread->mg.machine in all places
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    We were setting this only in machine__init(), i.e. for the map_groups that
    holds the kernel module maps, not for the one used for a thread's executable
    mmaps.

    Now we are sure that we can obtain the machine where a thread is by going
    via thread->mg->machine, thus we can, in the following patch, make all
    codepaths that receive machine _and_ thread, drop the machine one.

    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Don Zickus <dzickus@redhat.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Jean Pihet <jean.pihet@linaro.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/n/tip-y6zgaqsvhrf04v57u15e4ybm@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/machine.c | 5 ++---
    tools/perf/util/map.c | 8 ++++----
    tools/perf/util/map.h | 4 ++--
    tools/perf/util/thread.c | 2 +-
    4 files changed, 9 insertions(+), 10 deletions(-)

    diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
    index 34fc7c8672e4..c70b3ff7b289 100644
    --- a/tools/perf/util/machine.c
    +++ b/tools/perf/util/machine.c
    @@ -21,7 +21,7 @@ static void dsos__init(struct dsos *dsos)

    int machine__init(struct machine *machine, const char *root_dir, pid_t pid)
    {
    - map_groups__init(&machine->kmaps);
    + map_groups__init(&machine->kmaps, machine);
    RB_CLEAR_NODE(&machine->rb_node);
    dsos__init(&machine->user_dsos);
    dsos__init(&machine->kernel_dsos);
    @@ -32,7 +32,6 @@ int machine__init(struct machine *machine, const char *root_dir, pid_t pid)

    machine->vdso_info = NULL;

    - machine->kmaps.machine = machine;
    machine->pid = pid;

    machine->symbol_filter = NULL;
    @@ -319,7 +318,7 @@ static void machine__update_thread_pid(struct machine *machine,
    goto out_err;

    if (!leader->mg)
    - leader->mg = map_groups__new();
    + leader->mg = map_groups__new(machine);

    if (!leader->mg)
    goto out_err;
    diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
    index 2137c4596ec7..040a785c857b 100644
    --- a/tools/perf/util/map.c
    +++ b/tools/perf/util/map.c
    @@ -413,14 +413,14 @@ u64 map__objdump_2mem(struct map *map, u64 ip)
    return ip + map->reloc;
    }

    -void map_groups__init(struct map_groups *mg)
    +void map_groups__init(struct map_groups *mg, struct machine *machine)
    {
    int i;
    for (i = 0; i < MAP__NR_TYPES; ++i) {
    mg->maps[i] = RB_ROOT;
    INIT_LIST_HEAD(&mg->removed_maps[i]);
    }
    - mg->machine = NULL;
    + mg->machine = machine;
    mg->refcnt = 1;
    }

    @@ -471,12 +471,12 @@ bool map_groups__empty(struct map_groups *mg)
    return true;
    }

    -struct map_groups *map_groups__new(void)
    +struct map_groups *map_groups__new(struct machine *machine)
    {
    struct map_groups *mg = malloc(sizeof(*mg));

    if (mg != NULL)
    - map_groups__init(mg);
    + map_groups__init(mg, machine);

    return mg;
    }
    diff --git a/tools/perf/util/map.h b/tools/perf/util/map.h
    index 2f83954af050..6951a9d42339 100644
    --- a/tools/perf/util/map.h
    +++ b/tools/perf/util/map.h
    @@ -64,7 +64,7 @@ struct map_groups {
    int refcnt;
    };

    -struct map_groups *map_groups__new(void);
    +struct map_groups *map_groups__new(struct machine *machine);
    void map_groups__delete(struct map_groups *mg);
    bool map_groups__empty(struct map_groups *mg);

    @@ -150,7 +150,7 @@ void maps__remove(struct rb_root *maps, struct map *map);
    struct map *maps__find(struct rb_root *maps, u64 addr);
    struct map *maps__first(struct rb_root *maps);
    struct map *maps__next(struct map *map);
    -void map_groups__init(struct map_groups *mg);
    +void map_groups__init(struct map_groups *mg, struct machine *machine);
    void map_groups__exit(struct map_groups *mg);
    int map_groups__clone(struct map_groups *mg,
    struct map_groups *parent, enum map_type type);
    diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
    index 2b7b2d91c016..26386c9465a1 100644
    --- a/tools/perf/util/thread.c
    +++ b/tools/perf/util/thread.c
    @@ -15,7 +15,7 @@ int thread__init_map_groups(struct thread *thread, struct machine *machine)
    pid_t pid = thread->pid_;

    if (pid == thread->tid || pid == -1) {
    - thread->mg = map_groups__new();
    + thread->mg = map_groups__new(machine);
    } else {
    leader = machine__findnew_thread(machine, pid, pid);
    if (leader)
    --
    1.9.3


    \
     
     \ /
      Last update: 2014-10-28 15:01    [W:2.716 / U:0.556 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site