bpf: Add bpf_ksym_find function
[linux-2.6-microblaze.git] / kernel / bpf / core.c
index ab1846c..cd380f7 100644 (file)
@@ -668,19 +668,27 @@ static struct bpf_prog *bpf_prog_kallsyms_find(unsigned long addr)
               NULL;
 }
 
+static struct bpf_ksym *bpf_ksym_find(unsigned long addr)
+{
+       struct latch_tree_node *n;
+
+       n = latch_tree_find((void *)addr, &bpf_tree, &bpf_tree_ops);
+       return n ? container_of(n, struct bpf_ksym, tnode) : NULL;
+}
+
 const char *__bpf_address_lookup(unsigned long addr, unsigned long *size,
                                 unsigned long *off, char *sym)
 {
-       struct bpf_prog *prog;
+       struct bpf_ksym *ksym;
        char *ret = NULL;
 
        rcu_read_lock();
-       prog = bpf_prog_kallsyms_find(addr);
-       if (prog) {
-               unsigned long symbol_start = prog->aux->ksym.start;
-               unsigned long symbol_end = prog->aux->ksym.end;
+       ksym = bpf_ksym_find(addr);
+       if (ksym) {
+               unsigned long symbol_start = ksym->start;
+               unsigned long symbol_end = ksym->end;
 
-               strncpy(sym, prog->aux->ksym.name, KSYM_NAME_LEN);
+               strncpy(sym, ksym->name, KSYM_NAME_LEN);
 
                ret = sym;
                if (size)
@@ -698,7 +706,7 @@ bool is_bpf_text_address(unsigned long addr)
        bool ret;
 
        rcu_read_lock();
-       ret = bpf_prog_kallsyms_find(addr) != NULL;
+       ret = bpf_ksym_find(addr) != NULL;
        rcu_read_unlock();
 
        return ret;