Commit 676bfeae authored by Jiri Olsa's avatar Jiri Olsa Committed by Andrii Nakryiko
Browse files

ftrace: Make alloc_and_copy_ftrace_hash direct friendly



Make alloc_and_copy_ftrace_hash to copy also direct address
for each hash entry.

Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Reviewed-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
Link: https://lore.kernel.org/bpf/20251230145010.103439-3-jolsa@kernel.org
parent 4be42c92
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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;
		}
	}