]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ftrace: Make alloc_and_copy_ftrace_hash direct friendly
authorJiri Olsa <jolsa@kernel.org>
Tue, 30 Dec 2025 14:50:03 +0000 (15:50 +0100)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 28 Jan 2026 19:44:43 +0000 (11:44 -0800)
Make alloc_and_copy_ftrace_hash to copy also direct address
for each hash entry.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Link: https://lore.kernel.org/bpf/20251230145010.103439-3-jolsa@kernel.org
kernel/trace/ftrace.c

index 6040aacc97dadbff99bf065b8877809d734caf03..2a63860c172e9fbd5c531560a8018c84769653ea 100644 (file)
@@ -1212,7 +1212,7 @@ static void __add_hash_entry(struct ftrace_hash *hash,
 }
 
 static struct ftrace_func_entry *
-add_hash_entry(struct ftrace_hash *hash, unsigned long ip)
+add_hash_entry_direct(struct ftrace_hash *hash, unsigned long ip, unsigned long direct)
 {
        struct ftrace_func_entry *entry;
 
@@ -1221,11 +1221,18 @@ add_hash_entry(struct ftrace_hash *hash, unsigned long ip)
                return NULL;
 
        entry->ip = ip;
+       entry->direct = direct;
        __add_hash_entry(hash, entry);
 
        return entry;
 }
 
+static struct ftrace_func_entry *
+add_hash_entry(struct ftrace_hash *hash, unsigned long ip)
+{
+       return add_hash_entry_direct(hash, ip, 0);
+}
+
 static void
 free_hash_entry(struct ftrace_hash *hash,
                  struct ftrace_func_entry *entry)
@@ -1398,7 +1405,7 @@ alloc_and_copy_ftrace_hash(int size_bits, struct ftrace_hash *hash)
        size = 1 << hash->size_bits;
        for (i = 0; i < size; i++) {
                hlist_for_each_entry(entry, &hash->buckets[i], hlist) {
-                       if (add_hash_entry(new_hash, entry->ip) == NULL)
+                       if (add_hash_entry_direct(new_hash, entry->ip, entry->direct) == NULL)
                                goto free_hash;
                }
        }