All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Lyude Paul <lyude@redhat.com>, rust-for-linux@vger.kernel.org
Cc: "Danilo Krummrich" <dakr@redhat.com>,
	airlied@redhat.com, "Ingo Molnar" <mingo@redhat.com>,
	"Will Deacon" <will@kernel.org>,
	"Waiman Long" <longman@redhat.com>,
	"Peter Zijlstra" <peterz@infradead.org>,
	linux-kernel@vger.kernel.org,
	"Benno Lossin" <benno.lossin@proton.me>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Gary Guo" <gary@garyguo.net>, "Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Andreas Hindborg" <a.hindborg@samsung.com>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	"FUJITA Tomonori" <fujita.tomonori@gmail.com>,
	"Valentin Obst" <kernel@valentinobst.de>
Subject: Re: [PATCH v6 1/3] rust: Introduce irq module
Date: Wed, 02 Oct 2024 22:20:25 +0200	[thread overview]
Message-ID: <875xqaw92u.ffs@tglx> (raw)
In-Reply-To: <20240916213025.477225-2-lyude@redhat.com>

On Mon, Sep 16 2024 at 17:28, Lyude Paul wrote:
>  rust/helpers/helpers.c |  1 +
>  rust/helpers/irq.c     | 22 ++++++++++
>  rust/kernel/irq.rs     | 96 ++++++++++++++++++++++++++++++++++++++++++

irq is a patently bad name for this as it might get confused or conflict
with actual interrupt related functions irq_.....

The C naming is not ideal either but it's all about the CPU local
interrupt enable/disable, while irq_*() is related to actual interrupt
handling and chips.

So can we please have some halfways sensible mapping to the C namings?

> +/// Run the closure `cb` with interrupts disabled on the local CPU.
> +///
> +/// This disables interrupts, creates an [`IrqDisabled`] token and passes it to `cb`. The previous
> +/// interrupt state will be restored once the closure completes. Note that interrupts must be
> +/// disabled for the entire duration of `cb`, they cannot be re-enabled. In the future, this may be
> +/// expanded on [as documented here](https://github.com/Rust-for-Linux/linux/issues/1115).
> +///
> +/// # Examples
> +///
> +/// Using [`with_irqs_disabled`] to call a function that can only be called with interrupts
> +/// disabled:
> +///
> +/// ```
> +/// use kernel::irq::{IrqDisabled, with_irqs_disabled};
> +///
> +/// // Requiring interrupts be disabled to call a function
> +/// fn dont_interrupt_me(_irq: IrqDisabled<'_>) {
> +///     // When this token is available, IRQs are known to be disabled. Actions that rely on this
> +///     // can be safely performed
> +/// }
> +///
> +/// // Disables interrupts, their previous state will be restored once the closure completes.
> +/// with_irqs_disabled(|irq| dont_interrupt_me(irq));
> +/// ```
> +#[inline]
> +pub fn with_irqs_disabled<T>(cb: impl for<'a> FnOnce(IrqDisabled<'a>) -> T) -> T {
> +    // SAFETY: FFI call with no special requirements
> +    let flags = unsafe { bindings::local_irq_save() };
> +
> +    // SAFETY: We just disabled IRQs using `local_irq_save()`
> +    let ret = cb(unsafe { IrqDisabled::new() });

What's the point of the IrqDisabled::new() here? The above just disabled
them, no?

> +    // Confirm that IRQs are still disabled now that the callback has finished
> +    // SAFETY: FFI call with no special requirements
> +    debug_assert!(unsafe { bindings::irqs_disabled() });

And here you open code the check which is in IrqDisabled::new()

So I'd rather see this as:

   token = unsafe { IrqDisabled::new() };
   let ret = cb(token);
   assert_valid(token);

I might misunderstand rust here, but the provided code does not make
sense to me.

Thanks,

        tglx


  parent reply	other threads:[~2024-10-02 20:20 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-16 21:28 [PATCH v6 0/3] rust: Add irq abstraction, SpinLockIrq Lyude Paul
2024-09-16 21:28 ` [PATCH v6 1/3] rust: Introduce irq module Lyude Paul
2024-09-29 20:36   ` Trevor Gross
2024-09-29 23:45   ` Boqun Feng
2024-10-02 20:20   ` Thomas Gleixner [this message]
2024-10-04  8:58     ` Benno Lossin
2024-10-04 17:18       ` Lyude Paul
2024-10-17 18:51       ` Lyude Paul
2024-10-04 17:02     ` Lyude Paul
2024-10-10 21:00   ` Daniel Almeida
2024-09-16 21:28 ` [PATCH v6 2/3] rust: sync: Introduce lock::Backend::Context Lyude Paul
2024-09-29 20:40   ` Trevor Gross
2024-09-29 23:52   ` Boqun Feng
2024-09-16 21:28 ` [PATCH v6 3/3] rust: sync: Add SpinLockIrq Lyude Paul
2024-09-29 20:50   ` Trevor Gross
2024-09-29 23:59   ` Boqun Feng
2024-10-02 20:53   ` Thomas Gleixner
2024-10-03 12:51     ` Boqun Feng
2024-10-04 18:48     ` Lyude Paul
2024-10-05 18:19       ` Lyude Paul
2024-10-07 12:42         ` Boqun Feng
2024-10-07 18:13           ` Lyude Paul
2024-10-15 12:57           ` Andreas Hindborg
2024-10-15 20:17             ` Boqun Feng
2024-10-15 20:21               ` Boqun Feng
2024-10-16 20:57                 ` Lyude Paul
2024-10-17 13:34                   ` Andreas Hindborg
2024-10-07 12:01       ` Thomas Gleixner
2024-10-07 18:30         ` Lyude Paul
2024-10-08 15:21           ` Thomas Gleixner
2024-10-12  8:01             ` Boqun Feng
2024-10-10 16:39 ` [PATCH v6 0/3] rust: Add irq abstraction, SpinLockIrq Daniel Almeida
2024-10-12  5:29 ` Dirk Behme
2024-10-13 19:06   ` Thomas Gleixner
2024-10-13 21:43     ` Boqun Feng
2024-10-16 21:00       ` Thomas Gleixner
2024-10-16 21:31         ` Boqun Feng
2024-10-17 20:49           ` Lyude Paul
2024-10-17 22:27             ` Boqun Feng
2024-10-18  5:51           ` [POC 0/6] Allow SpinLockIrq to use a normal Guard interface Boqun Feng
2024-10-18  5:51             ` [POC 1/6] irq & spin_lock: Add counted interrupt disabling/enabling Boqun Feng
2024-10-21  7:04               ` kernel test robot
2024-10-21  7:35               ` kernel test robot
2024-10-21 20:44               ` Lyude Paul
2024-10-24 16:18                 ` Peter Zijlstra
2024-10-23 19:34               ` Thomas Gleixner
2024-10-23 19:51                 ` Peter Zijlstra
2024-10-23 20:38                   ` Thomas Gleixner
2024-10-24 10:05                     ` Peter Zijlstra
2024-10-24 17:22                       ` Thomas Gleixner
2024-10-24 21:57                         ` Boqun Feng
2024-10-25 15:04                           ` Thomas Gleixner
2024-10-25 18:28                             ` Peter Zijlstra
2024-10-24 19:12                       ` Lyude Paul
2025-07-24 20:36                   ` w/r/t "irq & spin_lock: Add counted interrupt disabling/enabling": holes in pcpu_hot? Lyude Paul
2025-07-24 21:59                     ` Thomas Gleixner
2024-10-24  5:05                 ` [POC 1/6] irq & spin_lock: Add counted interrupt disabling/enabling Boqun Feng
2024-10-24  8:17                   ` Thomas Gleixner
2024-10-24 16:20                     ` Boqun Feng
2024-10-18  5:51             ` [POC 2/6] rust: Introduce interrupt module Boqun Feng
2024-10-31 20:45               ` Lyude Paul
2024-10-31 20:47                 ` Lyude Paul
2024-10-18  5:51             ` [POC 3/6] rust: helper: Add spin_{un,}lock_irq_{enable,disable}() helpers Boqun Feng
2024-10-18  5:51             ` [POC 4/6] rust: sync: Add SpinLockIrq Boqun Feng
2024-10-18 19:23               ` Lyude Paul
2024-10-18 20:22                 ` Boqun Feng
2024-10-18  5:51             ` [POC 5/6] rust: sync: Introduce lock::Backend::Context Boqun Feng
2024-10-31 20:54               ` Lyude Paul
2024-10-18  5:51             ` [POC 6/6] rust: sync: lock: Add `Backend::BackendInContext` Boqun Feng
2024-10-18 10:22             ` [POC 0/6] Allow SpinLockIrq to use a normal Guard interface Andreas Hindborg
2024-10-18 12:42               ` Boqun Feng
2024-10-18 11:16             ` Andreas Hindborg
2024-10-18 16:05               ` Dirk Behme
2024-10-31 20:56             ` Lyude Paul
2024-10-17 20:42         ` [PATCH v6 0/3] rust: Add irq abstraction, SpinLockIrq Lyude Paul

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=875xqaw92u.ffs@tglx \
    --to=tglx@linutronix.de \
    --cc=a.hindborg@samsung.com \
    --cc=airlied@redhat.com \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=benno.lossin@proton.me \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dakr@redhat.com \
    --cc=daniel.almeida@collabora.com \
    --cc=fujita.tomonori@gmail.com \
    --cc=gary@garyguo.net \
    --cc=kernel@valentinobst.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=lyude@redhat.com \
    --cc=mingo@redhat.com \
    --cc=ojeda@kernel.org \
    --cc=peterz@infradead.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tmgross@umich.edu \
    --cc=wedsonaf@gmail.com \
    --cc=will@kernel.org \
    /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.