Skip to content

Commit

Permalink
perf map: Move structs and prototypes for map groups to a separate he…
Browse files Browse the repository at this point in the history
…ader

And since machine.h only needs what is in there, make it stop including
map.h and instead include this newly introduced map_groups.h instead.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-dbob25fv5rp2rjpwlnterf38@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Arnaldo Carvalho de Melo committed Feb 6, 2019
1 parent 1101f69 commit 41f3091
Show file tree
Hide file tree
Showing 11 changed files with 106 additions and 87 deletions.
1 change: 1 addition & 0 deletions tools/perf/arch/arm/tests/dwarf-unwind.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "perf_regs.h"
#include "thread.h"
#include "map.h"
#include "map_groups.h"
#include "event.h"
#include "debug.h"
#include "tests/tests.h"
Expand Down
1 change: 1 addition & 0 deletions tools/perf/arch/arm64/tests/dwarf-unwind.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "perf_regs.h"
#include "thread.h"
#include "map.h"
#include "map_groups.h"
#include "event.h"
#include "debug.h"
#include "tests/tests.h"
Expand Down
1 change: 1 addition & 0 deletions tools/perf/arch/powerpc/tests/dwarf-unwind.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "perf_regs.h"
#include "thread.h"
#include "map.h"
#include "map_groups.h"
#include "event.h"
#include "debug.h"
#include "tests/tests.h"
Expand Down
1 change: 1 addition & 0 deletions tools/perf/arch/x86/tests/dwarf-unwind.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "perf_regs.h"
#include "thread.h"
#include "map.h"
#include "map_groups.h"
#include "event.h"
#include "debug.h"
#include "tests/tests.h"
Expand Down
1 change: 1 addition & 0 deletions tools/perf/ui/stdio/hist.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "../../util/util.h"
#include "../../util/hist.h"
#include "../../util/map.h"
#include "../../util/map_groups.h"
#include "../../util/sort.h"
#include "../../util/evsel.h"
#include "../../util/srcline.h"
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/util/machine.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#include <sys/types.h>
#include <linux/rbtree.h>
#include "map.h"
#include "map_groups.h"
#include "dso.h"
#include "event.h"
#include "rwsem.h"
Expand Down
6 changes: 6 additions & 0 deletions tools/perf/util/map.c
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,12 @@ void map_groups__init(struct map_groups *mg, struct machine *machine)
refcount_set(&mg->refcnt, 1);
}

void map_groups__insert(struct map_groups *mg, struct map *map)
{
maps__insert(&mg->maps, map);
map->groups = mg;
}

static void __maps__purge(struct maps *maps)
{
struct rb_root *root = &maps->entries;
Expand Down
87 changes: 1 addition & 86 deletions tools/perf/util/map.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,10 @@
#include <linux/compiler.h>
#include <linux/list.h>
#include <linux/rbtree.h>
#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <linux/types.h>
#include "rwsem.h"

struct dso;
struct ip_callchain;
Expand Down Expand Up @@ -48,38 +46,7 @@ struct map {
refcount_t refcnt;
};

#define KMAP_NAME_LEN 256

struct kmap {
struct ref_reloc_sym *ref_reloc_sym;
struct map_groups *kmaps;
char name[KMAP_NAME_LEN];
};

struct maps {
struct rb_root entries;
struct rb_root names;
struct rw_semaphore lock;
};

struct map_groups {
struct maps maps;
struct machine *machine;
refcount_t refcnt;
};

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);

static inline struct map_groups *map_groups__get(struct map_groups *mg)
{
if (mg)
refcount_inc(&mg->refcnt);
return mg;
}

void map_groups__put(struct map_groups *mg);
struct kmap;

struct kmap *__map__kmap(struct map *map);
struct kmap *map__kmap(struct map *map);
Expand Down Expand Up @@ -187,61 +154,9 @@ void map__fixup_end(struct map *map);

void map__reloc_vmlinux(struct map *map);

void maps__insert(struct maps *maps, struct map *map);
void maps__remove(struct maps *maps, struct map *map);
struct map *maps__find(struct maps *maps, u64 addr);
struct map *maps__first(struct maps *maps);
struct map *map__next(struct map *map);
struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name,
struct map **mapp);
void map_groups__init(struct map_groups *mg, struct machine *machine);
void map_groups__exit(struct map_groups *mg);
int map_groups__clone(struct thread *thread,
struct map_groups *parent);
size_t map_groups__fprintf(struct map_groups *mg, FILE *fp);

int map__set_kallsyms_ref_reloc_sym(struct map *map, const char *symbol_name,
u64 addr);

static inline void map_groups__insert(struct map_groups *mg, struct map *map)
{
maps__insert(&mg->maps, map);
map->groups = mg;
}

static inline void map_groups__remove(struct map_groups *mg, struct map *map)
{
maps__remove(&mg->maps, map);
}

static inline struct map *map_groups__find(struct map_groups *mg, u64 addr)
{
return maps__find(&mg->maps, addr);
}

struct map *map_groups__first(struct map_groups *mg);

static inline struct map *map_groups__next(struct map *map)
{
return map__next(map);
}

struct symbol *map_groups__find_symbol(struct map_groups *mg,
u64 addr, struct map **mapp);

struct symbol *map_groups__find_symbol_by_name(struct map_groups *mg,
const char *name,
struct map **mapp);

struct addr_map_symbol;

int map_groups__find_ams(struct addr_map_symbol *ams);

int map_groups__fixup_overlappings(struct map_groups *mg, struct map *map,
FILE *fp);

struct map *map_groups__find_by_name(struct map_groups *mg, const char *name);

bool __map__is_kernel(const struct map *map);
bool __map__is_extra_kernel_map(const struct map *map);

Expand Down
91 changes: 91 additions & 0 deletions tools/perf/util/map_groups.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __PERF_MAP_GROUPS_H
#define __PERF_MAP_GROUPS_H

#include <linux/refcount.h>
#include <linux/rbtree.h>
#include <stdio.h>
#include <stdbool.h>
#include <linux/types.h>
#include "rwsem.h"

struct ref_reloc_sym;
struct machine;
struct map;
struct thread;

struct maps {
struct rb_root entries;
struct rb_root names;
struct rw_semaphore lock;
};

void maps__insert(struct maps *maps, struct map *map);
void maps__remove(struct maps *maps, struct map *map);
struct map *maps__find(struct maps *maps, u64 addr);
struct map *maps__first(struct maps *maps);
struct map *map__next(struct map *map);
struct symbol *maps__find_symbol_by_name(struct maps *maps, const char *name, struct map **mapp);

struct map_groups {
struct maps maps;
struct machine *machine;
refcount_t refcnt;
};

#define KMAP_NAME_LEN 256

struct kmap {
struct ref_reloc_sym *ref_reloc_sym;
struct map_groups *kmaps;
char name[KMAP_NAME_LEN];
};

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);

static inline struct map_groups *map_groups__get(struct map_groups *mg)
{
if (mg)
refcount_inc(&mg->refcnt);
return mg;
}

void map_groups__put(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 thread *thread, struct map_groups *parent);
size_t map_groups__fprintf(struct map_groups *mg, FILE *fp);

void map_groups__insert(struct map_groups *mg, struct map *map);

static inline void map_groups__remove(struct map_groups *mg, struct map *map)
{
maps__remove(&mg->maps, map);
}

static inline struct map *map_groups__find(struct map_groups *mg, u64 addr)
{
return maps__find(&mg->maps, addr);
}

struct map *map_groups__first(struct map_groups *mg);

static inline struct map *map_groups__next(struct map *map)
{
return map__next(map);
}

struct symbol *map_groups__find_symbol(struct map_groups *mg, u64 addr, struct map **mapp);
struct symbol *map_groups__find_symbol_by_name(struct map_groups *mg, const char *name, struct map **mapp);

struct addr_map_symbol;

int map_groups__find_ams(struct addr_map_symbol *ams);

int map_groups__fixup_overlappings(struct map_groups *mg, struct map *map, FILE *fp);

struct map *map_groups__find_by_name(struct map_groups *mg, const char *name);

#endif // __PERF_MAP_GROUPS_H
1 change: 1 addition & 0 deletions tools/perf/util/probe-event.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#include "cache.h"
#include "color.h"
#include "map.h"
#include "map_groups.h"
#include "symbol.h"
#include "thread.h"
#include <api/fs/fs.h>
Expand Down
1 change: 1 addition & 0 deletions tools/perf/util/symbol-elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <inttypes.h>

#include "map.h"
#include "map_groups.h"
#include "symbol.h"
#include "demangle-java.h"
#include "demangle-rust.h"
Expand Down

0 comments on commit 41f3091

Please sign in to comment.