Messages in this thread Patch in this message | | | From | Namhyung Kim <> | Subject | Re: [PATCH -tip v3 01/11] [BUGFIX] perf-probe: Fix to do exit call for symbol maps | Date | Mon, 17 Feb 2014 16:56:24 +0900 |
| |
Hi Masami,
On Thu, 06 Feb 2014 05:32:04 +0000, Masami Hiramatsu wrote: > Some perf-probe commands do symbol_init() but doesn't > do exit call. This fixes that to call symbol_exit() > and releases machine if needed. > This also merges init_vmlinux() and init_user_exec() > because both of them are doing similar things. > (init_user_exec() just skips init vmlinux related > symbol maps) > > Changes from v2: > - Not to set symbol_conf.try_vmlinux_path in init_symbol_maps() > (Thanks to Namhyung Kim!) > > Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
[SNIP] > -int show_line_range(struct line_range *lr, const char *module) > +static int __show_line_range(struct line_range *lr, const char *module) > { > int l = 1; > struct line_node *ln; > @@ -573,10 +568,6 @@ int show_line_range(struct line_range *lr, const char *module) > char *tmp; > > /* Search a line range */ > - ret = init_vmlinux(); > - if (ret < 0) > - return ret; > - > dinfo = open_debuginfo(module); > if (!dinfo) { > pr_warning("Failed to open debuginfo file.\n"); > @@ -646,6 +637,19 @@ end: > return ret; > } > > +int show_line_range(struct line_range *lr, const char *module) > +{ > + int ret; > + > + ret = init_symbol_maps(false); > + if (ret < 0) > + return ret; > + ret = __show_line_range(lr, module); > + exit_symbol_maps();
Wouldn't it be better moving init/exit_symbol_maps() to a common location if they're used by every operations?
Thanks, Namhyung
> + > + return ret; > +} > + > static int show_available_vars_at(struct debuginfo *dinfo, > struct perf_probe_event *pev, > int max_vls, struct strfilter *_filter, > @@ -707,14 +711,15 @@ int show_available_vars(struct perf_probe_event *pevs, int npevs, > int i, ret = 0; > struct debuginfo *dinfo; > > - ret = init_vmlinux(); > + ret = init_symbol_maps(false); > if (ret < 0) > return ret; > > dinfo = open_debuginfo(module); > if (!dinfo) { > pr_warning("Failed to open debuginfo file.\n"); > - return -ENOENT; > + ret = -ENOENT; > + goto out; > } > > setup_pager(); > @@ -724,6 +729,8 @@ int show_available_vars(struct perf_probe_event *pevs, int npevs, > externs); > > debuginfo__delete(dinfo); > +out: > + exit_symbol_maps(); > return ret; > } > > @@ -1807,7 +1814,7 @@ int show_perf_probe_events(void) > if (fd < 0) > return fd; > > - ret = init_vmlinux(); > + ret = init_symbol_maps(false); > if (ret < 0) > return ret; > > @@ -1820,6 +1827,7 @@ int show_perf_probe_events(void) > close(fd); > } > > + exit_symbol_maps(); > return ret; > } > > @@ -2135,12 +2143,7 @@ int add_perf_probe_events(struct perf_probe_event *pevs, int npevs, > if (pkgs == NULL) > return -ENOMEM; > > - if (!pevs->uprobes) > - /* Init vmlinux path */ > - ret = init_vmlinux(); > - else > - ret = init_user_exec(); > - > + ret = init_symbol_maps(pevs->uprobes); > if (ret < 0) { > free(pkgs); > return ret; > @@ -2174,6 +2177,7 @@ end: > zfree(&pkgs[i].tevs); > } > free(pkgs); > + exit_symbol_maps(); > > return ret; > } > @@ -2347,7 +2351,7 @@ static int available_kernel_funcs(const char *module) > struct map *map; > int ret; > > - ret = init_vmlinux(); > + ret = init_symbol_maps(false); > if (ret < 0) > return ret; > > @@ -2356,7 +2360,10 @@ static int available_kernel_funcs(const char *module) > pr_err("Failed to find %s map.\n", (module) ? : "kernel"); > return -EINVAL; > } > - return __show_available_funcs(map); > + ret = __show_available_funcs(map); > + exit_symbol_maps(); > + > + return ret; > } > > static int available_user_funcs(const char *target) > @@ -2364,7 +2371,7 @@ static int available_user_funcs(const char *target) > struct map *map; > int ret; > > - ret = init_user_exec(); > + ret = init_symbol_maps(true); > if (ret < 0) > return ret; > > @@ -2372,6 +2379,7 @@ static int available_user_funcs(const char *target) > ret = __show_available_funcs(map); > dso__delete(map->dso); > map__delete(map); > + exit_symbol_maps(); > return ret; > } >
| |