Skip to content

Commit

Permalink
perf tools: Pass machine to vdso__dso_findnew()
Browse files Browse the repository at this point in the history
This is preparation for removing the global variables used in vdso.c and
thereby fixing the lifetime of the VDSO temporary file.

Reviewed-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1406035081-14301-45-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Adrian Hunter authored and Arnaldo Carvalho de Melo committed Jul 23, 2014
1 parent 6d36345 commit 2a03068
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 10 deletions.
4 changes: 2 additions & 2 deletions tools/perf/util/machine.c
Original file line number Diff line number Diff line change
Expand Up @@ -1095,7 +1095,7 @@ int machine__process_mmap2_event(struct machine *machine,
else
type = MAP__FUNCTION;

map = map__new(&machine->user_dsos, event->mmap2.start,
map = map__new(machine, event->mmap2.start,
event->mmap2.len, event->mmap2.pgoff,
event->mmap2.pid, event->mmap2.maj,
event->mmap2.min, event->mmap2.ino,
Expand Down Expand Up @@ -1145,7 +1145,7 @@ int machine__process_mmap_event(struct machine *machine, union perf_event *event
else
type = MAP__FUNCTION;

map = map__new(&machine->user_dsos, event->mmap.start,
map = map__new(machine, event->mmap.start,
event->mmap.len, event->mmap.pgoff,
event->mmap.pid, 0, 0, 0, 0, 0, 0,
event->mmap.filename,
Expand Down
7 changes: 4 additions & 3 deletions tools/perf/util/map.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "build-id.h"
#include "util.h"
#include "debug.h"
#include "machine.h"
#include <linux/string.h>

const char *map_type__name[MAP__NR_TYPES] = {
Expand Down Expand Up @@ -137,7 +138,7 @@ void map__init(struct map *map, enum map_type type,
map->erange_warned = false;
}

struct map *map__new(struct list_head *dsos__list, u64 start, u64 len,
struct map *map__new(struct machine *machine, u64 start, u64 len,
u64 pgoff, u32 pid, u32 d_maj, u32 d_min, u64 ino,
u64 ino_gen, u32 prot, u32 flags, char *filename,
enum map_type type)
Expand Down Expand Up @@ -173,9 +174,9 @@ struct map *map__new(struct list_head *dsos__list, u64 start, u64 len,

if (vdso) {
pgoff = 0;
dso = vdso__dso_findnew(dsos__list);
dso = vdso__dso_findnew(machine);
} else
dso = __dsos__findnew(dsos__list, filename);
dso = __dsos__findnew(&machine->user_dsos, filename);

if (dso == NULL)
goto out_delete;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/util/map.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ typedef int (*symbol_filter_t)(struct map *map, struct symbol *sym);

void map__init(struct map *map, enum map_type type,
u64 start, u64 end, u64 pgoff, struct dso *dso);
struct map *map__new(struct list_head *dsos__list, u64 start, u64 len,
struct map *map__new(struct machine *machine, u64 start, u64 len,
u64 pgoff, u32 pid, u32 d_maj, u32 d_min, u64 ino,
u64 ino_gen, u32 prot, u32 flags,
char *filename, enum map_type type);
Expand Down
7 changes: 4 additions & 3 deletions tools/perf/util/vdso.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "vdso.h"
#include "util.h"
#include "symbol.h"
#include "machine.h"
#include "linux/string.h"
#include "debug.h"

Expand Down Expand Up @@ -90,9 +91,9 @@ void vdso__exit(void)
unlink(vdso_file);
}

struct dso *vdso__dso_findnew(struct list_head *head)
struct dso *vdso__dso_findnew(struct machine *machine)
{
struct dso *dso = dsos__find(head, VDSO__MAP_NAME, true);
struct dso *dso = dsos__find(&machine->user_dsos, VDSO__MAP_NAME, true);

if (!dso) {
char *file;
Expand All @@ -103,7 +104,7 @@ struct dso *vdso__dso_findnew(struct list_head *head)

dso = dso__new(VDSO__MAP_NAME);
if (dso != NULL) {
dsos__add(head, dso);
dsos__add(&machine->user_dsos, dso);
dso__set_long_name(dso, file, false);
}
}
Expand Down
4 changes: 3 additions & 1 deletion tools/perf/util/vdso.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ static inline bool is_vdso_map(const char *filename)
return !strcmp(filename, VDSO__MAP_NAME);
}

struct dso *vdso__dso_findnew(struct list_head *head);
struct machine;

struct dso *vdso__dso_findnew(struct machine *machine);
void vdso__exit(void);

#endif /* __PERF_VDSO__ */

0 comments on commit 2a03068

Please sign in to comment.