From: Peter Zijlstra <peterz@infradead.org>
To: Gary Guo <gary@garyguo.net>
Cc: "Boqun Feng" <boqun@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Lyude Paul" <lyude@redhat.com>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Onur Özkan" <work@onurozkan.dev>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Tamir Duberstein" <tamird@kernel.org>,
"Alexandre Courbot" <acourbot@nvidia.com>,
"Ingo Molnar" <mingo@redhat.com>, "Will Deacon" <will@kernel.org>,
"Waiman Long" <longman@redhat.com>,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org
Subject: Re: [PATCH RFC 0/2] rust: sync: create lock class using `#[track_caller]`
Date: Sat, 4 Jul 2026 19:10:42 +0200 [thread overview]
Message-ID: <20260704171042.GT751831@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <DJPXYGA9HD3B.30I15MLPUM7DR@garyguo.net>
On Sat, Jul 04, 2026 at 05:52:35PM +0100, Gary Guo wrote:
> On Fri Jul 3, 2026 at 11:32 PM BST, Peter Zijlstra wrote:
> > On Fri, Jul 03, 2026 at 03:24:29PM +0100, Gary Guo wrote:
> >> [snip] On the lockdep side,
> >> essentially the name will be "(rust)", while the actual name can be retrieved
> >> from the lock class key.
> >>
> >> So for
> >>
> >> let foo = KBox::pin_init(Mutex::new(42));
> >>
> >> in, say, foo.c:123
> >>
> >> it will eventually call
> >>
> >> struct rust_location *loc = /* static generated by the Rust compiler */;
> >> mutex_init_lockdep(foo, "(rust)", (struct lock_class_key *)loc)
> >>
> >> And when "(rust)" is encountered as lock class name, instead of printing the
> >> string as is, lockdep will call
> >>
> >> lockdep_print_rust_name(loc)
> >>
> >> which will be doing essentially
> >>
> >> pr_cont("foo.c:123");
> >
> > That seems quite terrible. The C names are based on the expression used
> > to initialize the class and are thus somewhat descriptive. But file:line
> > combos are horrid identifiers for locks.
> >
> > Why would you want to do this?
>
> I do think this is not ideal, however the current code is already doing this.
> This RFC series isn't changing the name at all, just represent this in a
> different way.
>
> The reason that file:line is used for names is due to the fundamental difference
> between initialization in C and Rust. In C you create something uninitialized
> first, and then initialize it, and it'll be UB if the value is used before
> initialization or (for some types) initialize a value twice. In Rust we use
> pin_init to ensure that a value cannot be used uninitialized.
>
> The way the syntax is write out currently is something like
>
> pin_init!(MyStruct {
> my_mutex <- new_mutex!(initial_data),
> })
>
> [
> which this series is turning it to
>
> pin_init!(MyStruct {
> my_mutex <- Mutex::new(initial_data),
> })
> ]
>
> as you can see the `new_mutex!` or `Mutx::new` does not know where it is going
To be frank, no I don't see. I have absolutely no frigging clue what any
of that means :-(
> to be initialized to, because we prevent people from being able to name a
> yet-to-be-initialized place.
>
> It is possible to use the C approach (which early days of Rust-for-Linux does
> use), but doing so require a lot of unsafe keywords because you are relying on
> the programmer to not mess things up, instead of having the compiler check.
>
> So the best alternative that we can use for the name under this constraint is
> the file:line combo. It is less descriptive, but at least it does tell you where
> the lock class is used, so you can still trace it back. Given lockdep is a
> debugging feature, I think the less descriptive name, albeit inconvenient, is
> not a dealbreaker.
People already struggle to make sense of lockdep reports, this isn't
going to make it better :/
> The trade off here is the convenience of creating a lock (safely) vs the
> descriptiveness of the name, and I think the former is more important. It is
> still possible to explicit give a name if it helps (Binder is actually doing
> this already), but this currently cannot be implicitly created.
Like I said, Rust is still line noise to me, and I really don't
understand anything you've just tried to tell me.
Now, I do speak (some) C++, and the new thing you mention got me
thinking you're talking about a constructor. Are you trying to say that
since the invocation of the constructor is somewhat implicit, there is
no good way to stringize the structure member name and store it?
That said, in C++ you can mandate a string be handed to the constructor;
this would mean everybody would need to explicitly provide a descriptive
name, surely Rust can do this same? Every !debug build could then
instantly ignore that string, but at least it'd be there.
next prev parent reply other threads:[~2026-07-04 17:10 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-03 13:47 [PATCH RFC 0/2] rust: sync: create lock class using `#[track_caller]` Gary Guo
2026-07-03 13:47 ` [PATCH RFC 1/2] rust: sync: introduce a way to create lock class from caller Gary Guo
2026-07-03 13:47 ` [PATCH RFC 2/2] lockdep: delegate Rust lock class printing to Rust code Gary Guo
2026-07-03 14:01 ` [PATCH RFC 0/2] rust: sync: create lock class using `#[track_caller]` Peter Zijlstra
2026-07-03 14:24 ` Gary Guo
2026-07-03 22:32 ` Peter Zijlstra
2026-07-04 16:52 ` Gary Guo
2026-07-04 17:10 ` Peter Zijlstra [this message]
2026-07-04 17:46 ` Gary Guo
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=20260704171042.GT751831@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=mingo@redhat.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=will@kernel.org \
--cc=work@onurozkan.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