The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Andreas Hindborg <a.hindborg@kernel.org>
To: Miguel Ojeda <ojeda@kernel.org>
Cc: "Anna-Maria Behnsen" <anna-maria@linutronix.de>,
	 "Frederic Weisbecker" <frederic@kernel.org>,
	 "Thomas Gleixner" <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org,
	 "rust-for-linux@vger.kernel.org"
	<rust-for-linux@vger.kernel.org>
Subject: Re: [GIT PULL] Rust `hrtimer` support for v6.15
Date: Sat, 22 Mar 2025 12:15:53 +0100	[thread overview]
Message-ID: <87r02pb9jq.fsf@kernel.org> (raw)
In-Reply-To: <87tt7md1s6.fsf@kernel.org> (Andreas Hindborg's message of "Fri, 21 Mar 2025 13:10:07 +0100")

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hi Miguel,

Andreas Hindborg <a.hindborg@kernel.org> writes:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Hi Miguel,
>
> Andreas Hindborg <a.hindborg@kernel.org> writes:
>
>> Hi Miguel,
>>
>> Please pull the Rust support for hrtimer for v6.15.
>>
>> This initial support allows for intrusive use of timers without
>> allocating when starting a timer. We support `Pin<Box<T>>`, `Arc<T>`,
>> `Pin<&T>` and `Pin<&mut T>` pointer types for working with these
>> intrusive timers. We support at most one `HrTimer` field in a struct for
>> use with this API.
>>
>> For now, the primary users will be the Rust null block driver, `rnull`,
>> and the Rust kernel mode setting driver `rkvms`. I expect us to add more
>> features to the API as the demands from users grow.
>>
>> The PR also includes two changes for the core rust and rust/alloc
>> subsytems that are dependencies of the hrtimer Rust API: `Arc::as_ptr`
>> and `Box::into_pin`. The alloc change was Ack'd by Danilo.
>>
>> The commits were in linux-next since next-20250313.
>
> Please find an updated pull request below.
>
> As discussed, I fixed the UB you fund in:
>
>   rust: hrtimer: allow timer restart from timer handler
>
> by casting to `u32` when assigning enum values. The commits below this
> commit are unchanged, the later commits were replayed on top of the
> changed commit.

I'm sorry, but I have to do another update. My usual workflow missed a
clippy warning because it depends on clippy warnings being treated as
errors when building with `W=e`. I forgot that is not upstream yet.

I added `#[allow(clippy::unnecessary_cast)]` to silence clippy in the
cases where the types match for `HrTimerRestart`.

The following changes since commit a64dcfb451e254085a7daee5fe51bf22959d52d3:

  Linux 6.14-rc2 (2025-02-09 12:45:03 -0800)

are available in the Git repository at:

  https://github.com/rust-for-linux/linux.git tags/rust-hrtimer-for-v6.15-v3

for you to fetch changes up to 142d93914b8575753f56f0c3571bd81f214b7418:

  rust: hrtimer: add maintainer entry (2025-03-22 12:08:54 +0100)


Best regards,
Andreas Hindborg


- ----------------------------------------------------------------
Rust hrtimer API for v6.15

Introduce Rust support for the `hrtimer` subsystem:

 - Add a way to use the `hrtimer` subsystem from Rust. Rust code can now set up
   intrusive timers without allocating when starting the timer.

 - Add support for `Pin<Box<_>>`, `Arc<_>`, `Pin<&_>` and `Pin<&mut _>` as
   pointer types for use with timer callbacks.

 - Add support for setting clock source and timer mode.

`kernel` crate:

 - Add `Arc::as_ptr` for converting an `Arc` to a raw pointer. This is a
   dependency for the `hrtimer` API.

 - Add `Box::into_pin` for converting a `Box<_>` into a `Pin<Box<_>>` to align
   with Rust `alloc`. This is a dependency for the `hrtimer` API.

- ----------------------------------------------------------------
Andreas Hindborg (13):
      rust: hrtimer: introduce hrtimer support
      rust: sync: add `Arc::as_ptr`
      rust: hrtimer: implement `HrTimerPointer` for `Arc`
      rust: hrtimer: allow timer restart from timer handler
      rust: hrtimer: add `UnsafeHrTimerPointer`
      rust: hrtimer: add `hrtimer::ScopedHrTimerPointer`
      rust: hrtimer: implement `UnsafeHrTimerPointer` for `Pin<&T>`
      rust: hrtimer: implement `UnsafeHrTimerPointer` for `Pin<&mut T>`
      rust: alloc: add `Box::into_pin`
      rust: hrtimer: implement `HrTimerPointer` for `Pin<Box<T>>`
      rust: hrtimer: add `HrTimerMode`
      rust: hrtimer: add clocksource selection through `ClockId`
      rust: hrtimer: add maintainer entry

 MAINTAINERS                         |  15 ++
 rust/kernel/alloc/kbox.rs           |   6 +
 rust/kernel/sync/arc.rs             |  13 +-
 rust/kernel/time.rs                 |  68 +++++
 rust/kernel/time/hrtimer.rs         | 519 ++++++++++++++++++++++++++++++++++++
 rust/kernel/time/hrtimer/arc.rs     | 100 +++++++
 rust/kernel/time/hrtimer/pin.rs     | 104 ++++++++
 rust/kernel/time/hrtimer/pin_mut.rs | 108 ++++++++
 rust/kernel/time/hrtimer/tbox.rs    | 120 +++++++++
 9 files changed, 1051 insertions(+), 2 deletions(-)
 create mode 100644 rust/kernel/time/hrtimer.rs
 create mode 100644 rust/kernel/time/hrtimer/arc.rs
 create mode 100644 rust/kernel/time/hrtimer/pin.rs
 create mode 100644 rust/kernel/time/hrtimer/pin_mut.rs
 create mode 100644 rust/kernel/time/hrtimer/tbox.rs
-----BEGIN PGP SIGNATURE-----

iQJKBAEBCAA0FiEEEsH5R1a/fCoV1sAS4bgaPnkoY3cFAmfem+kWHGEuaGluZGJv
cmdAa2VybmVsLm9yZwAKCRDhuBo+eShjd81tD/94J4FDlaOlfz/WMkbxQo2B3lef
XztcyQ6G3zPfyMOZ50ZrbvQPyHtnKPxjD0rjfuCCQnzmcKs0fqUxcBKXpvRusi0Q
dC3f8fBT7n+8wvU6eOO/gzR0pblvu4yepardP/MSPaTH4pBF0xgaRFqM3S8syejY
elHnw1y9mSH7EbSJFJvVIodXLE0MXifb5FicN5iawQ27IeBCdZDoQa0x/tLBsYpY
8CkAqsWUUU424dvGrKjcsUjfLYJXiXfDQmuLi5tReVpoWF8g47DmbnLv+s/4r87S
fOLaNyzn81tStYze0+DaEOpkXID6y64EyfwmXGV09CRJAE432tbBxRzouKTvDZxt
gO9VPBGtoN7tm6bzobQuCTXsLlrNCIh36Ju952uR1fjgQ8uNg15qPgZdRi++K2Rq
KX7LEQTONpkfm0brPj4mZQjOwU2iQRdytwQrE15mMjqvAjQuZLDyYuPmyCiz6YeQ
LdbC7oJC0n9LX23H97mTHiuq3AXZzskt5twrL9a4ol3mBSPopyiGM78/qIoqXI5k
Vz4pu8pxwm6VEyHeShWBFTi+Xw2mlSE7q2JiBEug2IZAY9qI8yrKj29rFvYw1JlE
v/ur2emLJtWsCudzr0eNgjoQqHC/aRu41LtAfJA1rJzwdRwrod6zE0plvWTNVkTG
zDTqNl4OVmIifTK9Kg==
=CxhJ
-----END PGP SIGNATURE-----


  reply	other threads:[~2025-03-22 11:16 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-13 13:09 [GIT PULL] Rust `hrtimer` support for v6.15 Andreas Hindborg
2025-03-21 12:10 ` Andreas Hindborg
2025-03-22 11:15   ` Andreas Hindborg [this message]
2025-03-25 23:22     ` Miguel Ojeda
2025-03-25 23:24     ` Miguel Ojeda
2025-03-25 20:03   ` Miguel Ojeda

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=87r02pb9jq.fsf@kernel.org \
    --to=a.hindborg@kernel.org \
    --cc=anna-maria@linutronix.de \
    --cc=frederic@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /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