Merge branch 'for-4.3' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata
[firefly-linux-kernel-4.4.55.git] / tools / perf / util / symbol.c
index 60f11414bb5c8c6b463980f7b767662654e0331d..1f97ffb158a6af43e95cd1428ae0339d5fed3386 100644 (file)
@@ -441,10 +441,25 @@ static struct symbol *symbols__find_by_name(struct rb_root *symbols,
        return &s->sym;
 }
 
+void dso__reset_find_symbol_cache(struct dso *dso)
+{
+       enum map_type type;
+
+       for (type = MAP__FUNCTION; type <= MAP__VARIABLE; ++type) {
+               dso->last_find_result[type].addr   = 0;
+               dso->last_find_result[type].symbol = NULL;
+       }
+}
+
 struct symbol *dso__find_symbol(struct dso *dso,
                                enum map_type type, u64 addr)
 {
-       return symbols__find(&dso->symbols[type], addr);
+       if (dso->last_find_result[type].addr != addr) {
+               dso->last_find_result[type].addr   = addr;
+               dso->last_find_result[type].symbol = symbols__find(&dso->symbols[type], addr);
+       }
+
+       return dso->last_find_result[type].symbol;
 }
 
 struct symbol *dso__first_symbol(struct dso *dso, enum map_type type)
@@ -1133,8 +1148,8 @@ static int dso__load_kcore(struct dso *dso, struct map *map,
 
        fd = open(kcore_filename, O_RDONLY);
        if (fd < 0) {
-               pr_err("%s requires CAP_SYS_RAWIO capability to access.\n",
-                       kcore_filename);
+               pr_debug("Failed to open %s. Note /proc/kcore requires CAP_SYS_RAWIO capability to access.\n",
+                        kcore_filename);
                return -EINVAL;
        }
 
@@ -1838,7 +1853,7 @@ static void vmlinux_path__exit(void)
        zfree(&vmlinux_path);
 }
 
-static int vmlinux_path__init(struct perf_session_env *env)
+static int vmlinux_path__init(struct perf_env *env)
 {
        struct utsname uts;
        char bf[PATH_MAX];
@@ -1906,7 +1921,7 @@ int setup_list(struct strlist **list, const char *list_str,
        if (list_str == NULL)
                return 0;
 
-       *list = strlist__new(true, list_str);
+       *list = strlist__new(list_str, NULL);
        if (!*list) {
                pr_err("problems parsing %s list\n", list_name);
                return -1;
@@ -1949,7 +1964,7 @@ static bool symbol__read_kptr_restrict(void)
        return value;
 }
 
-int symbol__init(struct perf_session_env *env)
+int symbol__init(struct perf_env *env)
 {
        const char *symfs;