From: sashiko-bot@kernel.org
To: "Ian Rogers" <irogers@google.com>
Cc: linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v13 12/21] perf dsos: Use read lock fast path in dsos__findnew_id()
Date: Fri, 13 Nov 2026 17:09:11 +0000 [thread overview]
Message-ID: <sashiko-outbox-213278@kernel.org> (raw)
In-Reply-To: <20261113164152.2095566-13-irogers@google.com>
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] perf dso: broken bsearch() ordering in __dso_id__cmp() with
build_id
--
commit c6037e2ef92de325486412d51231ca52f297ef40
Author: Ian Rogers <irogers@google.com>
perf dsos: Use read lock fast path in dsos__findnew_id()
This commit adds a read-lock fast path to dsos__findnew_id() and
prioritizes build IDs over inode fields when comparing and improving DSO
IDs.
> diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
> index f0e02062c09c8..f736a94a53a97 100644
> --- a/tools/perf/util/dso.c
> +++ b/tools/perf/util/dso.c
> @@ -1649,6 +1649,11 @@ static void dso__set_long_name_id(struct dso *dso, const char *name, bool name_a
>
> static int __dso_id__cmp(const struct dso_id *a, const struct dso_id *b)
> {
> + if (build_id__is_defined(&a->build_id) && build_id__is_defined(&b->build_id)) {
> + if (a->build_id.size != b->build_id.size)
> + return a->build_id.size < b->build_id.size ? -1 : 1;
> + return memcmp(a->build_id.data, b->build_id.data, a->build_id.size);
> + }
> if (a->mmap2_valid && b->mmap2_valid) {
> if (a->maj > b->maj) return -1;
> if (a->maj < b->maj) return 1;
> @@ -1663,11 +1668,6 @@ static int __dso_id__cmp(const struct dso_id *a, const struct dso_id *b)
> if (a->ino_generation > b->ino_generation) return -1;
> if (a->ino_generation < b->ino_generation) return 1;
> }
> - if (build_id__is_defined(&a->build_id) && build_id__is_defined(&b->build_id)) {
> - if (a->build_id.size != b->build_id.size)
> - return a->build_id.size < b->build_id.size ? -1 : 1;
> - return memcmp(a->build_id.data, b->build_id.data, a->build_id.size);
> - }
> return 0;
> }
[Severity: Medium]
Can moving the build_id check ahead of mmap2_valid break the bsearch()
ordering in __dsos__find_by_longname_id()?
A DSO created from an MMAP2 event without a build ID has mmap2_valid =
true, and retains mmap2_valid = true when a build_id is later added via
__dso__improve_id() or dso__set_build_id(). If two DSOs with the same
long_name have both build_id and mmap2_valid set (for example, after a
library is replaced on disk), qsort() orders them in dsos->dsos by
build_id.
When dsos__findnew_id() later searches for a lookup key that has only
mmap2_valid set and no build_id, __dso_id__cmp() skips the build_id
comparison and compares (maj, min, ino) against an array sorted by
build_id. If the build_id order and inode order disagree, bsearch()
searches the wrong half of dsos->dsos, misses the existing DSO, and
inserts a duplicate entry.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261113164152.2095566-1-irogers@google.com?part=12
next prev parent reply other threads:[~2026-11-13 17:09 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-13 16:41 [PATCH v13 00/21] tools/perf: Adopt kernel compiler-context-analysis.h annotations Ian Rogers
2026-11-13 16:41 ` [PATCH v13 01/21] compiler-context-analysis: Avoid unused parameter warning in _context_unsafe_alias() Ian Rogers
2026-11-13 16:50 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 02/21] tools headers compiler: Synchronize compiler_types.h with the kernel sources Ian Rogers
2026-11-13 16:56 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 03/21] tools headers: Synchronize linux/compiler-context-analysis.h " Ian Rogers
2026-11-13 16:49 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 04/21] perf mutex: Use kernel style compiler-context-analysis.h annotations Ian Rogers
2026-11-13 16:57 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 05/21] perf build: Enable additional Clang thread-safety flags Ian Rogers
2026-11-13 16:56 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 06/21] perf comm: Add __guarded_by annotations to struct comm_strs Ian Rogers
2026-11-13 17:02 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 07/21] perf vdso: Fix unlocked __dsos__add() and race in __machine__addnew_vdso() Ian Rogers
2026-11-13 16:50 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 08/21] perf dsos: Skip BPF and OOL DSOs in dsos__find_kernel_dso() Ian Rogers
2026-11-13 16:58 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 09/21] perf dsos: Ensure DSOs in auxtrace, machine, and symbol are in dsos Ian Rogers
2026-11-13 16:59 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 10/21] perf dso: Pass dso_data to close_data_fd() and dso__list_del() Ian Rogers
2026-11-13 16:55 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 11/21] perf dso: Use DEFINE_MUTEX for dso__data_open_lock Ian Rogers
2026-11-13 16:52 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 12/21] perf dsos: Use read lock fast path in dsos__findnew_id() Ian Rogers
2026-11-13 17:09 ` sashiko-bot [this message]
2026-11-13 16:41 ` [PATCH v13 13/21] perf dso: Expand context analysis annotations Ian Rogers
2026-11-13 16:58 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 14/21] perf thread: Expand context analysis annotations to threads and namespaces_lock Ian Rogers
2026-11-13 16:59 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 15/21] perf intel-tpebs: Fix race in tpebs_stop() and tpebs_cmd.out fd handling Ian Rogers
2026-11-13 17:13 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 16/21] perf intel-tpebs: Use DEFINE_MUTEX for tpebs_mtx and add lock annotations Ian Rogers
2026-11-13 17:09 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 17/21] perf config: Add __guarded_by and __must_hold annotations Ian Rogers
2026-11-13 17:01 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 18/21] perf env: " Ian Rogers
2026-11-13 17:11 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 19/21] perf maps: Fix lock inversion in maps__load_first() Ian Rogers
2026-11-13 17:10 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 20/21] perf maps: Fix map index lookup fallback and removal Ian Rogers
2026-11-13 17:07 ` sashiko-bot
2026-11-13 16:41 ` [PATCH v13 21/21] perf maps: Add context analysis annotations Ian Rogers
2026-11-13 17:04 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=sashiko-outbox-213278@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=irogers@google.com \
--cc=linux-perf-users@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox