rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Danilo Krummrich <dakr@kernel.org>
To: gregkh@linuxfoundation.org, rafael@kernel.org,
	bhelgaas@google.com, ojeda@kernel.org, alex.gaynor@gmail.com,
	boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com,
	benno.lossin@proton.me, a.hindborg@kernel.org,
	aliceryhl@google.com, tmgross@umich.edu
Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
	rust-for-linux@vger.kernel.org,
	Danilo Krummrich <dakr@kernel.org>
Subject: [PATCH v2 0/4] Improve soundness of bus device abstractions
Date: Fri, 14 Mar 2025 17:09:03 +0100	[thread overview]
Message-ID: <20250314160932.100165-1-dakr@kernel.org> (raw)

Currently, when sharing references of bus devices (e.g. ARef<pci::Device>), we
do not have a way to restrict which functions of a bus device can be called.

Consequently, it is possible to call all bus device functions concurrently from
any context. This includes functions, which access fields of the (bus) device,
which are not protected against concurrent access.

This is improved by applying an execution context to the bus device in form of a
generic type.

For instance, the PCI device reference that is passed to probe() has the type
pci::Device<Core>, which implements all functions that are only allowed to be
called from bus callbacks.

The implementation for the default context (pci::Device) contains all functions
that are safe to call from any context concurrently.

The context types can be extended as required, e.g. to limit availability  of
certain (bus) device functions to probe().

A branch containing the patches can be found in [1].

[1] https://web.git.kernel.org/pub/scm/linux/kernel/git/dakr/linux.git/log/?h=rust/device

Changes in v2:
  - make `DeviceContext` trait sealed
  - impl From<&pci::Device<device::Core>> for ARef<pci::Device>
  - impl From<&platform::Device<device::Core>> for ARef<platform::Device>
  - rebase onto v6.14-rc6
  - apply RBs

Danilo Krummrich (4):
  rust: pci: use to_result() in enable_device_mem()
  rust: device: implement device context marker
  rust: pci: fix unrestricted &mut pci::Device
  rust: platform: fix unrestricted &mut platform::Device

 rust/kernel/device.rs                |  26 +++++
 rust/kernel/pci.rs                   | 137 +++++++++++++++++----------
 rust/kernel/platform.rs              |  95 +++++++++++++------
 samples/rust/rust_driver_pci.rs      |   8 +-
 samples/rust/rust_driver_platform.rs |  11 ++-
 5 files changed, 187 insertions(+), 90 deletions(-)


base-commit: 80e54e84911a923c40d7bee33a34c1b4be148d7a
-- 
2.48.1


             reply	other threads:[~2025-03-14 16:09 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-14 16:09 Danilo Krummrich [this message]
2025-03-14 16:09 ` [PATCH v2 1/4] rust: pci: use to_result() in enable_device_mem() Danilo Krummrich
2025-03-14 16:09 ` [PATCH v2 2/4] rust: device: implement device context marker Danilo Krummrich
2025-03-14 17:21   ` Boqun Feng
2025-03-14 17:31     ` Danilo Krummrich
2025-03-14 17:43       ` Miguel Ojeda
2025-03-14 17:48       ` Boqun Feng
2025-03-14 16:09 ` [PATCH v2 3/4] rust: pci: fix unrestricted &mut pci::Device Danilo Krummrich
2025-03-14 16:09 ` [PATCH v2 4/4] rust: platform: fix unrestricted &mut platform::Device Danilo Krummrich
2025-03-14 17:28 ` [PATCH v2 0/4] Improve soundness of bus device abstractions Boqun Feng
2025-03-14 17:32   ` Danilo Krummrich
2025-03-15  8:34 ` Greg KH
2025-03-17 11:46   ` Danilo Krummrich
2025-03-17 13:17     ` Greg KH

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=20250314160932.100165-1-dakr@kernel.org \
    --to=dakr@kernel.org \
    --cc=a.hindborg@kernel.org \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=benno.lossin@proton.me \
    --cc=bhelgaas@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=ojeda@kernel.org \
    --cc=rafael@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).