> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
> index 827fb9a0bf0d..cfa0c7ad7cbf 100644
> --- a/kernel/trace/ftrace.c
> +++ b/kernel/trace/ftrace.c

[ ... ]

> @@ -9270,6 +9279,19 @@ int ftrace_lookup_symbols(const char **sorted_syms, 
> size_t cnt, unsigned long *a
>       struct kallsyms_data args;
>       int found_all;
>
> +     /* Fast path: single symbol uses O(log N) binary search */
> +     if (cnt == 1) {
> +             addrs[0] = kallsyms_lookup_name(sorted_syms[0]);
> +             if (addrs[0] && ftrace_location(addrs[0]))
> +                     return 0;
> +             /*
> +              * Binary lookup can fail for duplicate symbol names
> +              * where the first match is not ftrace-instrumented,
> +              * or for module symbols.  Retry with linear scan.
> +              */

Is "or for module symbols" accurate here as a separate failure case?

kallsyms_lookup_name() falls back to module_kallsyms_lookup_name()
when the vmlinux lookup fails:

kernel/kallsyms.c:kallsyms_lookup_name() {
    ...
    ret = kallsyms_lookup_names(name, &i, NULL);
    if (!ret)
        return kallsyms_sym_address(get_symbol_seq(i));
    return module_kallsyms_lookup_name(name);
}

So for a symbol that exists only in a module, the fast path finds
it through module_kallsyms_lookup_name() and succeeds if
ftrace_location() confirms it.

The only module-related failure case is when a vmlinux symbol with
the same name shadows the module symbol in the binary search, but
that is already covered by "duplicate symbol names where the first
match is not ftrace-instrumented."

The same phrasing appears in the commit message:

> If binary lookup fails (duplicate symbol names where the first match
> is not ftrace-instrumented, or module symbols), the function falls
> through to the existing linear scan path.

Would something like "for duplicate symbol names where the first
match is not ftrace-instrumented (including cases where a vmlinux
symbol shadows an ftrace-instrumented module symbol)" be more
precise?

> +     }
> +
> +     /* Batch path: single-pass O(N) linear scan */
>       memset(addrs, 0, sizeof(*addrs) * cnt);


---
AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md

CI run summary: https://github.com/kernel-patches/bpf/actions/runs/22453951811

AI-authorship-score: low
AI-authorship-explanation: Domain-specific kernel expertise with precise 
empirical benchmarks and standard kernel patch conventions consistent with a 
human developer optimizing a real-world bottleneck.
issues-found: 1
issue-severity-score: low
issue-severity-explanation: Misleading comment and commit message claim module 
symbols cause fast path fallback, but kallsyms_lookup_name() handles 
module-only symbols correctly via module_kallsyms_lookup_name().

Reply via email to