Linux Perf Users
 help / color / mirror / Atom feed
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

  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