Commit 9bae1e8c authored by Namhyung Kim's avatar Namhyung Kim Committed by Arnaldo Carvalho de Melo

perf probe: Export init/exit_probe_symbol_maps()

The init/exit_symbols_maps() functions are to setup and cleanup
necessary info for probe events.  But they need to be called from out of
the probe code now, so this patch exports them.

However the names are too generic, so change them to have 'probe'. :)
Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
Acked-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1441852026-28974-2-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent a43aac29
...@@ -317,6 +317,10 @@ static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs) ...@@ -317,6 +317,10 @@ static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs)
int i, k; int i, k;
const char *event = NULL, *group = NULL; const char *event = NULL, *group = NULL;
ret = init_probe_symbol_maps(pevs->uprobes);
if (ret < 0)
return ret;
ret = convert_perf_probe_events(pevs, npevs); ret = convert_perf_probe_events(pevs, npevs);
if (ret < 0) if (ret < 0)
goto out_cleanup; goto out_cleanup;
...@@ -354,6 +358,7 @@ static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs) ...@@ -354,6 +358,7 @@ static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs)
out_cleanup: out_cleanup:
cleanup_perf_probe_events(pevs, npevs); cleanup_perf_probe_events(pevs, npevs);
exit_probe_symbol_maps();
return ret; return ret;
} }
......
...@@ -71,7 +71,7 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp); ...@@ -71,7 +71,7 @@ static char *synthesize_perf_probe_point(struct perf_probe_point *pp);
static struct machine *host_machine; static struct machine *host_machine;
/* Initialize symbol maps and path of vmlinux/modules */ /* Initialize symbol maps and path of vmlinux/modules */
static int init_symbol_maps(bool user_only) int init_probe_symbol_maps(bool user_only)
{ {
int ret; int ret;
...@@ -101,7 +101,7 @@ static int init_symbol_maps(bool user_only) ...@@ -101,7 +101,7 @@ static int init_symbol_maps(bool user_only)
return ret; return ret;
} }
static void exit_symbol_maps(void) void exit_probe_symbol_maps(void)
{ {
if (host_machine) { if (host_machine) {
machine__delete(host_machine); machine__delete(host_machine);
...@@ -859,11 +859,11 @@ int show_line_range(struct line_range *lr, const char *module, bool user) ...@@ -859,11 +859,11 @@ int show_line_range(struct line_range *lr, const char *module, bool user)
{ {
int ret; int ret;
ret = init_symbol_maps(user); ret = init_probe_symbol_maps(user);
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = __show_line_range(lr, module, user); ret = __show_line_range(lr, module, user);
exit_symbol_maps(); exit_probe_symbol_maps();
return ret; return ret;
} }
...@@ -941,7 +941,7 @@ int show_available_vars(struct perf_probe_event *pevs, int npevs, ...@@ -941,7 +941,7 @@ int show_available_vars(struct perf_probe_event *pevs, int npevs,
int i, ret = 0; int i, ret = 0;
struct debuginfo *dinfo; struct debuginfo *dinfo;
ret = init_symbol_maps(pevs->uprobes); ret = init_probe_symbol_maps(pevs->uprobes);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -958,7 +958,7 @@ int show_available_vars(struct perf_probe_event *pevs, int npevs, ...@@ -958,7 +958,7 @@ int show_available_vars(struct perf_probe_event *pevs, int npevs,
debuginfo__delete(dinfo); debuginfo__delete(dinfo);
out: out:
exit_symbol_maps(); exit_probe_symbol_maps();
return ret; return ret;
} }
...@@ -2262,7 +2262,7 @@ int show_perf_probe_events(struct strfilter *filter) ...@@ -2262,7 +2262,7 @@ int show_perf_probe_events(struct strfilter *filter)
setup_pager(); setup_pager();
ret = init_symbol_maps(false); ret = init_probe_symbol_maps(false);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -2278,7 +2278,7 @@ int show_perf_probe_events(struct strfilter *filter) ...@@ -2278,7 +2278,7 @@ int show_perf_probe_events(struct strfilter *filter)
close(kp_fd); close(kp_fd);
if (up_fd > 0) if (up_fd > 0)
close(up_fd); close(up_fd);
exit_symbol_maps(); exit_probe_symbol_maps();
return ret; return ret;
} }
...@@ -2746,10 +2746,6 @@ int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs) ...@@ -2746,10 +2746,6 @@ int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs)
{ {
int i, ret; int i, ret;
ret = init_symbol_maps(pevs->uprobes);
if (ret < 0)
return ret;
/* Loop 1: convert all events */ /* Loop 1: convert all events */
for (i = 0; i < npevs; i++) { for (i = 0; i < npevs; i++) {
/* Init kprobe blacklist if needed */ /* Init kprobe blacklist if needed */
...@@ -2794,20 +2790,23 @@ void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs) ...@@ -2794,20 +2790,23 @@ void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs)
pevs[i].ntevs = 0; pevs[i].ntevs = 0;
clear_perf_probe_event(&pevs[i]); clear_perf_probe_event(&pevs[i]);
} }
exit_symbol_maps();
} }
int add_perf_probe_events(struct perf_probe_event *pevs, int npevs) int add_perf_probe_events(struct perf_probe_event *pevs, int npevs)
{ {
int ret; int ret;
ret = init_probe_symbol_maps(pevs->uprobes);
if (ret < 0)
return ret;
ret = convert_perf_probe_events(pevs, npevs); ret = convert_perf_probe_events(pevs, npevs);
if (ret == 0) if (ret == 0)
ret = apply_perf_probe_events(pevs, npevs); ret = apply_perf_probe_events(pevs, npevs);
cleanup_perf_probe_events(pevs, npevs); cleanup_perf_probe_events(pevs, npevs);
exit_probe_symbol_maps();
return ret; return ret;
} }
...@@ -2867,7 +2866,7 @@ int show_available_funcs(const char *target, struct strfilter *_filter, ...@@ -2867,7 +2866,7 @@ int show_available_funcs(const char *target, struct strfilter *_filter,
struct map *map; struct map *map;
int ret; int ret;
ret = init_symbol_maps(user); ret = init_probe_symbol_maps(user);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -2897,7 +2896,7 @@ int show_available_funcs(const char *target, struct strfilter *_filter, ...@@ -2897,7 +2896,7 @@ int show_available_funcs(const char *target, struct strfilter *_filter,
if (user) { if (user) {
map__put(map); map__put(map);
} }
exit_symbol_maps(); exit_probe_symbol_maps();
return ret; return ret;
} }
......
...@@ -110,6 +110,8 @@ struct variable_list { ...@@ -110,6 +110,8 @@ struct variable_list {
}; };
struct map; struct map;
int init_probe_symbol_maps(bool user_only);
void exit_probe_symbol_maps(void);
/* Command string to events */ /* Command string to events */
extern int parse_perf_probe_command(const char *cmd, extern int parse_perf_probe_command(const char *cmd,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment