All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alice Ryhl <aliceryhl@google.com>
To: FUJITA Tomonori <fujita.tomonori@gmail.com>
Cc: ojeda@kernel.org, a.hindborg@kernel.org,
	bjorn3_gh@protonmail.com,  boqun.feng@gmail.com, dakr@kernel.org,
	gary@garyguo.net, lossin@kernel.org,
	 rust-for-linux@vger.kernel.org, tmgross@umich.edu,
	 jens.korinth.tuta.io@kernel.org
Subject: Re: [PATCH v1 0/2] Add support for print exactly once
Date: Thu, 13 Nov 2025 10:07:36 +0000	[thread overview]
Message-ID: <aRWt6Ah8KuBXff8V@google.com> (raw)
In-Reply-To: <20251105054731.3194118-1-fujita.tomonori@gmail.com>

On Wed, Nov 05, 2025 at 02:47:29PM +0900, FUJITA Tomonori wrote:
> This adds the Rust equivalent of the kernel's DO_ONCE_LITE and
> pr_*_once macros.
> 
> A proposal for this feature was made in the past [1], but it didn't
> reach consensus on the implementation and wasn't merged. After reading
> the previous discussions, I implemented it using a different approach.
> 
> In the previous proposal, a structure equivalent to std::sync::Once
> was implemented to realize the DO_ONCE_LITE macro. The approach tried
> to provide Once-like semantics by using two atomic values. As pointed
> out in the previous review comments, I think this approach tries to
> provide more functionality than needed, making it unnecessarily
> complex. Also, because data structures in the .data..once section can
> be cleared at any time (via debugfs clear_warn_once), an
> implementation using two atomics wouldn't work correctly.
> 
> Therefore, I decided to drop the idea of emulating Once and took a
> minimal approach to implement DO_ONCE_LITE with only one atomic
> variable. While it would be possible to implement the feature entirely
> as a Rust macro, the functionality that can be implemented as regular
> functions has been extracted and implemented as the OnceLite struct
> for better code readability.
> 
> Of course, unlike the previous proposal, this uses LKMM atomics.
> 
> [1] https://lore.kernel.org/rust-for-linux/20241126-pr_once_macros-v4-0-410b8ca9643e@tuta.io/

There has been a fair bit of discussion below. Here is my take on the
way forward:

1. OnceLite should be it's own special type, and it should be in a
   printing-related module, not kernel::sync. The reason for this is
   that do_once_lite! is hooked up to a special section that allows you
   to reset the once status, and if someone used it for anything not
   related to printing, they would end up with being incorrectly reset
   when someone resets pr_warn_once calls.

2. I would suggest just using a relaxed load followed by store instead
   of xchg. This is what the C-side does, and I think there is no strong
   reason to deviate. It allows for a single byte of data instead of i32.

3. If we *do* decide to use xchg, then the xchg needs to be guarded by a
   load so that we avoid a write operation when it's already cleared.
   Many read ops are much cheaper than many read/write ops.

Alice

  parent reply	other threads:[~2025-11-13 10:07 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <nsSZZk6z9Ia7Gl5JS9LVNDRjc-9eFvtSWyLI4SSjsHNouDkDV-GmXnixMYlIpGHryPfhLr8Z2W_CkWd6D2frYQ==@protonmail.internalid>
2025-11-05  5:47 ` [PATCH v1 0/2] Add support for print exactly once FUJITA Tomonori
2025-11-05  5:47   ` [PATCH v1 1/2] rust: Add support for calling a function " FUJITA Tomonori
2025-11-05  9:21     ` Onur Özkan
2025-11-05 10:35       ` Alice Ryhl
2025-11-05 10:32     ` Alice Ryhl
2025-11-06  0:34       ` FUJITA Tomonori
2025-11-05 16:19     ` Boqun Feng
2025-11-06  0:10       ` FUJITA Tomonori
2025-11-06 14:46         ` Boqun Feng
2025-11-07  9:03           ` Alice Ryhl
2025-11-10  9:21             ` FUJITA Tomonori
2025-11-10 16:14               ` Boqun Feng
2025-11-10 16:37                 ` Miguel Ojeda
2025-11-10 16:55                   ` Boqun Feng
2025-11-11 21:42                     ` Miguel Ojeda
2025-11-11  3:09                 ` FUJITA Tomonori
2025-11-11  5:17                   ` Boqun Feng
2025-11-11  9:12                     ` Andreas Hindborg
2025-11-11 23:38                       ` FUJITA Tomonori
2025-11-12  9:04                         ` Andreas Hindborg
2025-11-15 13:37                           ` FUJITA Tomonori
2025-11-11 21:43                     ` FUJITA Tomonori
2025-11-12  1:30                       ` Boqun Feng
2025-11-12  2:23                         ` Boqun Feng
2025-11-12  9:10                         ` Andreas Hindborg
2025-11-14 15:03                           ` Boqun Feng
2025-11-12 13:17                         ` FUJITA Tomonori
2025-11-05  5:47   ` [PATCH v1 2/2] rust: Add pr_*_once macros FUJITA Tomonori
2025-11-05 10:33     ` Alice Ryhl
2025-11-05 20:59   ` [PATCH v1 0/2] Add support for print exactly once Andreas Hindborg
2025-11-05 23:12     ` FUJITA Tomonori
2025-11-06 14:31       ` Boqun Feng
2025-11-10 12:16         ` Andreas Hindborg
2025-11-10 16:08           ` Boqun Feng
2025-11-11  9:02             ` Andreas Hindborg
2025-11-12  0:45               ` FUJITA Tomonori
2025-11-12  1:04                 ` Boqun Feng
2025-11-12  1:18                   ` FUJITA Tomonori
2025-11-12  1:35                     ` Boqun Feng
2025-11-13  9:55                       ` FUJITA Tomonori
2025-11-11  1:28           ` FUJITA Tomonori
2025-11-13 10:07   ` Alice Ryhl [this message]
2025-11-13 11:18     ` FUJITA Tomonori
2025-11-13 12:06       ` Alice Ryhl
2025-11-14  0:47         ` FUJITA Tomonori
2025-11-14  0:57           ` Boqun Feng
2025-11-14  1:12             ` FUJITA Tomonori
2025-11-14  1:19               ` Boqun Feng
2025-11-14  9:48                 ` Alice Ryhl
2025-11-14 13:55                   ` FUJITA Tomonori
2025-11-14 13:47                 ` FUJITA Tomonori
2025-11-13 15:20       ` Boqun Feng

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=aRWt6Ah8KuBXff8V@google.com \
    --to=aliceryhl@google.com \
    --cc=a.hindborg@kernel.org \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dakr@kernel.org \
    --cc=fujita.tomonori@gmail.com \
    --cc=gary@garyguo.net \
    --cc=jens.korinth.tuta.io@kernel.org \
    --cc=lossin@kernel.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tmgross@umich.edu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.