lkml.org 
[lkml]   [2016]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH perf/core v9 02/16] perf symbol: Cleanup the code flow of dso__find_kallsyms
    Date
    Cleanup the code flow of dso__find_kallsyms() to remove
    redundant checking code and add some comment for readability.

    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    ---
    Changes in v9:
    - Split into filename__readable() and others.

    Changes in v8:
    - Add comments why we can't use access(R_OK) for /proc/kcore access.
    ---
    tools/perf/util/symbol.c | 36 +++++++++++++-----------------------
    1 file changed, 13 insertions(+), 23 deletions(-)

    diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
    index a469346..1df6092 100644
    --- a/tools/perf/util/symbol.c
    +++ b/tools/perf/util/symbol.c
    @@ -1674,21 +1674,8 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
    sizeof(host_build_id)) == 0)
    is_host = dso__build_id_equal(dso, host_build_id);

    - build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
    -
    - scnprintf(path, sizeof(path), "%s/%s/%s", buildid_dir,
    - DSO__NAME_KCORE, sbuild_id);
    -
    - /* Use /proc/kallsyms if possible */
    + /* Try a fast path for /proc/kallsyms if possible */
    if (is_host) {
    - DIR *d;
    -
    - /* If no cached kcore go with /proc/kallsyms */
    - d = opendir(path);
    - if (!d)
    - goto proc_kallsyms;
    - closedir(d);
    -
    /*
    * Do not check the build-id cache, unless we know we cannot use
    * /proc/kcore or module maps don't match to /proc/kallsyms.
    @@ -1699,18 +1686,24 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
    if (filename__readable("/proc/kcore") &&
    !validate_kcore_addresses("/proc/kallsyms", map))
    goto proc_kallsyms;
    -
    - /* Find kallsyms in build-id cache with kcore */
    - if (!find_matching_kcore(map, path, sizeof(path)))
    - return strdup(path);
    -
    - goto proc_kallsyms;
    }

    + build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
    +
    /* Find kallsyms in build-id cache with kcore */
    + scnprintf(path, sizeof(path), "%s/%s/%s",
    + buildid_dir, DSO__NAME_KCORE, sbuild_id);
    +
    if (!find_matching_kcore(map, path, sizeof(path)))
    return strdup(path);

    + /* Use current /proc/kallsyms if possible */
    + if (is_host) {
    +proc_kallsyms:
    + return strdup("/proc/kallsyms");
    + }
    +
    + /* Finally, find a cache of kallsyms */
    scnprintf(path, sizeof(path), "%s/%s/%s",
    buildid_dir, DSO__NAME_KALLSYMS, sbuild_id);

    @@ -1721,9 +1714,6 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
    }

    return strdup(path);
    -
    -proc_kallsyms:
    - return strdup("/proc/kallsyms");
    }

    static int dso__load_kernel_sym(struct dso *dso, struct map *map,
    \
     
     \ /
      Last update: 2016-05-28 18:01    [W:3.150 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site