From: "Danilo Krummrich" <dakr@kernel.org>
To: "Zhi Wang" <zhiw@nvidia.com>
Cc: <rust-for-linux@vger.kernel.org>, <linux-pci@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <aliceryhl@google.com>,
<bhelgaas@google.com>, <kwilczynski@kernel.org>,
<ojeda@kernel.org>, <alex.gaynor@gmail.com>,
<boqun.feng@gmail.com>, <gary@garyguo.net>,
<bjorn3_gh@protonmail.com>, <lossin@kernel.org>,
<a.hindborg@kernel.org>, <tmgross@umich.edu>,
<markus.probst@posteo.de>, <helgaas@kernel.org>,
<cjia@nvidia.com>, <smitra@nvidia.com>, <ankita@nvidia.com>,
<aniketa@nvidia.com>, <kwankhede@nvidia.com>,
<targupta@nvidia.com>, <acourbot@nvidia.com>,
<joelagnelf@nvidia.com>, <jhubbard@nvidia.com>,
<zhiwang@kernel.org>, <daniel.almeida@collabora.com>,
"Jason Gunthorpe" <jgg@nvidia.com>
Subject: Re: [PATCH v2 0/2] rust: introduce abstractions for fwctl
Date: Thu, 22 Jan 2026 22:32:03 +0100 [thread overview]
Message-ID: <DFVFTMRD9LM8.HGKSL57RYD1D@kernel.org> (raw)
In-Reply-To: <20260122204232.15988-1-zhiw@nvidia.com>
(Cc: Jason)
Looks like you used the recipient list of another patch series by accident. :)
On Thu Jan 22, 2026 at 9:42 PM CET, Zhi Wang wrote:
> In the NVIDIA vGPU RFC [1], the vGPU type blobs must be provided to the GSP
> before userspace can enumerate available vGPU types and create vGPU
> instances. The original design relied on the firmware loading interface,
> but fwctl is a more natural fit for this use case, as it is designed for
> uploading configuration or firmware data required before the device becomes
> operational.
>
> This patch introduces a Rust abstraction over the fwctl subsystem,
> providing safe and idiomatic bindings.
>
> The new `fwctl` module allows Rust drivers to integrate with the existing
> C-side fwctl core through a typed trait interface. It provides:
>
> - `Operations` trait — defines driver-specific operations such as
> `open_uctx()`, `close_uctx()`, `info()`, and `fw_rpc()`.
> Each Rust driver implements this trait to describe its own per-FD
> user-context behavior and RPC handling.
>
> - `UserCtx<T>` — a generic wrapper around `struct fwctl_uctx`
> embedding driver-specific context data, providing safe conversion
> from raw C pointers and access to the parent device.
>
> - `Registration<T>` — safe registration and automatic unregistration
> of `struct fwctl_device` objects using the kernel's device model.
>
> - `VTable<T>` — a static vtable bridging C callbacks and Rust
> trait methods, ensuring type safety across the FFI boundary.
>
> `rust/kernel/lib.rs` is updated to conditionally include this module
> under `CONFIG_FWCTL`.
>
> The repo with the patches can be found at [2].
>
> v2:
>
> - Don't open fwctl_put(). Add a rust helper. (Jason/Danilo)
> - Wrap Registration with Devres to guarantee proper lifetime management.
> (Jason/Danilo)
> - Rename FwctlOps to Operations, FwctlUserCtx to UserCtx, FwctlDevice to
> Device. (Danilo)
> - Use fwctl::DeviceType enum instead of raw u32 for DEVICE_TYPE. (Danilo)
> - Change fwctl_uctx field in UserCtx to Opaque<bindings::fwctl_uctx> and
> make it private. (Danilo)
> - Provide Deref and DerefMut implementations for UserCtx::uctx. (Danilo)
> - Add UserCtx::parent_device_from_raw() to simplify parent device access.
> - Use cast() and cast_mut() instead of manual pointer casts. (Danilo)
> - Implement AlwaysRefCounted for Device and use ARef<Device> in
> Registration. (Danilo)
> - Add rust_helper_fwctl_get() for reference counting.
> - Improve safety comments for slice::from_raw_parts_mut() in
> fw_rpc_callback. (Danilo)
> - Convert imports to vertical style.
> - Fix all clippy warnings.
>
> v1:
>
> - Initial submission introducing fwctl Rust abstractions.
>
> [1] https://lore.kernel.org/all/20250903221111.3866249-1-zhiw@nvidia.com/
> [2] https://github.com/zhiwang-nvidia/driver-core/tree/fwctl-rust-abstraction-v2
>
> Zhi Wang (2):
> rust: introduce abstractions for fwctl
> samples: rust: fwctl: add sample code for fwctl
>
> drivers/fwctl/Kconfig | 12 +
> include/uapi/fwctl/fwctl.h | 1 +
> rust/bindings/bindings_helper.h | 1 +
> rust/helpers/fwctl.c | 17 ++
> rust/helpers/helpers.c | 3 +-
> rust/kernel/fwctl.rs | 456 ++++++++++++++++++++++++++++++
> rust/kernel/lib.rs | 2 +
> samples/rust/Kconfig | 11 +
> samples/rust/Makefile | 1 +
> samples/rust/rust_driver_fwctl.rs | 136 +++++++++
> 10 files changed, 639 insertions(+), 1 deletion(-)
> create mode 100644 rust/helpers/fwctl.c
> create mode 100644 rust/kernel/fwctl.rs
> create mode 100644 samples/rust/rust_driver_fwctl.rs
>
> --
> 2.51.0
next prev parent reply other threads:[~2026-01-22 21:32 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-22 20:42 [PATCH v2 0/2] rust: introduce abstractions for fwctl Zhi Wang
2026-01-22 20:42 ` [PATCH v2 1/2] " Zhi Wang
2026-01-22 21:17 ` Joel Fernandes
2026-01-23 10:25 ` Zhi Wang
2026-01-26 17:48 ` Gary Guo
2026-01-27 19:59 ` Zhi Wang
2026-01-26 18:19 ` Jason Gunthorpe
2026-01-27 19:57 ` Zhi Wang
2026-01-27 20:07 ` Danilo Krummrich
2026-01-28 0:04 ` Jason Gunthorpe
2026-01-28 1:21 ` Danilo Krummrich
2026-01-28 13:20 ` [PATCH v2 1/2] rust: introduce abstractions for fwctlg Jason Gunthorpe
2026-01-28 14:01 ` Danilo Krummrich
2026-01-28 14:59 ` Jason Gunthorpe
2026-01-28 15:49 ` Danilo Krummrich
2026-01-28 15:56 ` Jason Gunthorpe
2026-01-28 16:35 ` Danilo Krummrich
2026-01-28 16:39 ` Jason Gunthorpe
2026-01-28 17:26 ` Zhi Wang
2026-01-28 17:30 ` Zhi Wang
2026-01-28 17:39 ` Jason Gunthorpe
2026-01-28 17:40 ` Danilo Krummrich
2026-01-28 11:36 ` [PATCH v2 1/2] rust: introduce abstractions for fwctl Zhi Wang
2026-01-28 11:41 ` Danilo Krummrich
2026-01-27 20:09 ` Danilo Krummrich
2026-01-22 20:42 ` [PATCH v2 2/2] samples: rust: fwctl: add sample code " Zhi Wang
2026-01-22 20:58 ` Jason Gunthorpe
2026-01-22 21:06 ` Danilo Krummrich
2026-01-22 21:16 ` John Hubbard
2026-01-23 10:23 ` Zhi Wang
2026-01-26 17:59 ` Gary Guo
2026-01-22 21:32 ` Danilo Krummrich [this message]
2026-01-23 10:14 ` [PATCH v2 0/2] rust: introduce abstractions " Zhi Wang
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=DFVFTMRD9LM8.HGKSL57RYD1D@kernel.org \
--to=dakr@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=aniketa@nvidia.com \
--cc=ankita@nvidia.com \
--cc=bhelgaas@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=cjia@nvidia.com \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=helgaas@kernel.org \
--cc=jgg@nvidia.com \
--cc=jhubbard@nvidia.com \
--cc=joelagnelf@nvidia.com \
--cc=kwankhede@nvidia.com \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=markus.probst@posteo.de \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=smitra@nvidia.com \
--cc=targupta@nvidia.com \
--cc=tmgross@umich.edu \
--cc=zhiw@nvidia.com \
--cc=zhiwang@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.