From: clicedvly768 <harepro29@gmail.com>
To: ojeda@kernel.org, dmitry.torokhov@gmail.com
Cc: rust-for-linux@vger.kernel.org, linux-input@vger.kernel.org,
clicedvly768 <harepro29@gmail.com>
Subject: [PATCH v5 0/2] rust: input: add input/serio abstractions and port Gravis Stinger driver
Date: Sat, 7 Nov 2026 03:30:31 +0500 [thread overview]
Message-ID: <20261106223033.452853-1-harepro29@gmail.com> (raw)
This patch series introduces safe Rust abstractions for Linux input
devices (struct input_dev) and the serio (Serial I/O) bus subsystem,
along with a port of the legacy Gravis Stinger serial gamepad driver
to safe Rust.
Changes in v5:
- serio: resolved invalid irqreturn_t constructor compilation error
by constructing bindings::irqreturn(ret as u32).
- serio: decoupled child device allocation and publication in Driver
lifecycle (init -> start -> attach). Child input devices are
allocated and configured before opening the port, but only registered
via Driver::start() after serio_open() succeeds. This prevents
premature registration and spurious uevents on probe failures.
- serio: added C wrappers rust_helper_serio_pause_rx() and
rust_helper_serio_continue_rx() to safely attach child devices in
Driver::attach() under hardware RX pause, eliminating races with
concurrent interrupts without sleeping.
- serio: removed redundant Device::as_device() method and made
Device::as_raw() crate-private (pub(crate)), relying on the standard
AsRef<device::Device> implementation.
Changes in v4:
- Makefile: restored analog.o and db9.o in joystick Makefile
that were inadvertently removed during previous revisions.
- serio: eliminated concurrent borrow_mut() and aliasing data races
between connect_callback() and interrupt_callback() by initializing
and registering the input device prior to serio_open().
- serio: mapped interrupt return codes via bindings::irqreturn(..).
- serio & stinger: formatted all module imports in strict vertical
style with trailing // comments.
- serio: annotated Registration::drop() and Driver::disconnect() with
#[inline].
Changes in v3:
- input: added AllocatedDevice::set_phys_from_parent() to dynamically
format the physical device path ("%s/input0") in an owned kernel
heap buffer.
- input: managed parent device reference counts in set_parent(), drop(),
and register() using get_device()/put_device() to avoid dangling
pointers and reference leaks.
- input: eliminated manual cleanup duplication in register() by checking
to_result() before mem::forget(self).
- input: implemented Send and Sync for AllocatedDevice, added #[inline]
on small methods, and formatted imports vertically.
- serio: integrated serio::Device with kernel device abstractions via
AsBusDevice, impl_device_context_deref!, and AsRef<device::Device>.
- stinger: restored userspace-visible device name ("Gravis Stinger")
and dynamic phys path, preserving udev and EVIOCGNAME compatibility.
- stinger: maintained module name "stinger.ko" using Kbuild object
aliasing under CONFIG_JOYSTICK_STINGER_RUST.
Changes in v2:
- Combined serio subsystem abstractions and Gravis Stinger driver
port into a single patch (2/2).
- Retained original C driver (stinger.c) under CONFIG_JOYSTICK_STINGER
and introduced CONFIG_JOYSTICK_STINGER_RUST to avoid regressions on
architectures and configurations without Rust support.
- Ensured IS_REACHABLE() guards for C helpers and #[cfg(CONFIG_* = "y")]
for rust/kernel modules to prevent unresolved symbols.
clicedvly768 (2):
rust: input: add input device abstractions
rust: serio: add serio bus abstractions and port Gravis Stinger driver
drivers/input/joystick/Kconfig | 14 ++
drivers/input/joystick/Makefile | 3 +
drivers/input/joystick/stinger_rust.rs | 191 +++++++++++++++
rust/bindings/bindings_helper.h | 2 +
rust/helpers/helpers.c | 2 +
rust/helpers/input.c | 22 ++
rust/helpers/serio.c | 27 ++
rust/kernel/input.rs | 253 +++++++++++++++++++
rust/kernel/lib.rs | 4 +
rust/kernel/serio.rs | 327 +++++++++++++++++++++++++
10 files changed, 845 insertions(+)
create mode 100644 drivers/input/joystick/stinger_rust.rs
create mode 100644 rust/helpers/input.c
create mode 100644 rust/helpers/serio.c
create mode 100644 rust/kernel/input.rs
create mode 100644 rust/kernel/serio.rs
--
2.56.0
next reply other threads:[~2026-11-06 22:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 22:30 clicedvly768 [this message]
2026-11-06 22:30 ` [PATCH v5 1/2] rust: input: add input device abstractions clicedvly768
2026-11-06 22:49 ` Dmitry Torokhov
2026-11-06 22:30 ` [PATCH v5 2/2] rust: serio: add serio bus abstractions and port Gravis Stinger driver clicedvly768
2026-11-06 22:44 ` sashiko-bot
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=20261106223033.452853-1-harepro29@gmail.com \
--to=harepro29@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.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.