[RFC PATCH v3 0/6] Rust goldfish_address_space driver (ioctl-only subset)
From: Wenzhao Liao
Date: Mon Apr 06 2026 - 12:57:07 EST
This respin narrows the Rust goldfish_address_space RFC to the
open/release/ioctl ABI subset. Userspace mmap and PING_WITH_DATA are
not part of this series.
I would like to send this as a small first upstream step for the Rust
driver, instead of asking reviewers to take the mmap/VMA lifecycle work
in the same round.
The goal of the respin is to keep only the pieces that are still
required by the current driver:
- the goldfish UAPI header and Rust bindings exposure,
- minimal page helpers for the ping page,
- a small SharedMemoryBar abstraction for shared BAR reservation,
memremap() lifetime, and physical base discovery,
- hardened miscdevice registration/open boundaries,
- and the Rust goldfish_address_space driver itself.
Compared to the previous round, this drops the Rust VMA/BAR-to-VMA
mapping work from the series and rewrites the driver and miscdevice
pieces around the current teardown and publication model. The driver
remains #![forbid(unsafe_code)].
Feedback would be especially helpful on:
- whether the ioctl-only ABI subset is a reasonable first upstream step
for goldfish_address_space;
- whether SharedMemoryBar is the right minimal Rust abstraction for
shared-memory BAR reservation plus memremap() lifetime;
- whether the miscdevice hardening direction makes sense, especially the
publication-safe open context and the THIS_MODULE-owned safe
file_operations path.
Changes since v2:
- dropped the userspace mmap portion of the RFC and removed the unused
Rust VMA/BAR-to-VMA mapping patch from the series;
- narrowed the goldfish Kconfig help text and driver description to the
open/release/ioctl ABI subset;
- reworked miscdevice so safe open() only sees publication-safe state
and safe drivers no longer have a raw file_operations escape hatch;
- reworked goldfish teardown around deregister() -> shutdown() ->
disable_device(), with live-file revocation before PCI disable and
explicit enable_device_mem() probe unwind;
- kept the in-tree Rust VMA helpers still used by binder out of this
series, so the respin only carries code with a current caller.
Behavior exercised for the RFC-limited ABI subset:
- open / release
- allocate_block / deallocate_block
- ping
- claim_shared / unclaim_shared
- unknown ioctl
- reopen
No claim is made beyond that subset in this respin.
Build-tested:
- make LLVM=1 rust/kernel.o
- make LLVM=1 drivers/platform/goldfish/goldfish_address_space.o
- make LLVM=1 samples/rust/rust_misc_device.o
Wenzhao Liao (6):
uapi: add goldfish_address_space userspace ABI header
rust: bindings: expose goldfish address-space headers
rust: page: add helpers for page-backed ping state
rust: pci: add shared BAR memremap support
rust: miscdevice: harden registration and safe file_operations
invariants
platform/goldfish: add Rust goldfish_address_space driver
MAINTAINERS | 10 +
drivers/platform/goldfish/Kconfig | 11 +
drivers/platform/goldfish/Makefile | 1 +
.../goldfish/goldfish_address_space.rs | 917 ++++++++++++++++++
include/uapi/linux/goldfish_address_space.h | 54 ++
rust/bindings/bindings_helper.h | 1 +
rust/helpers/page.c | 5 +
rust/kernel/miscdevice.rs | 409 +++++---
rust/kernel/page.rs | 52 +-
rust/kernel/pci.rs | 8 +
rust/kernel/pci/id.rs | 2 +-
rust/kernel/pci/io.rs | 112 ++-
rust/uapi/uapi_helper.h | 1 +
samples/rust/rust_misc_device.rs | 9 +-
14 files changed, 1453 insertions(+), 139 deletions(-)
create mode 100644 drivers/platform/goldfish/goldfish_address_space.rs
create mode 100644 include/uapi/linux/goldfish_address_space.h
--
2.34.1