[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ea2466c4d250ff953b3be9602a3671fb@dakr.org>
Date: Wed, 26 Feb 2025 10:05:48 +0100
From: kernel@...r.org
To: Alice Ryhl <aliceryhl@...gle.com>
Cc: Lyude Paul <lyude@...hat.com>, rust-for-linux@...r.kernel.org, Greg
Kroah-Hartman <gregkh@...uxfoundation.org>, Maíra Canal
<mairacanal@...eup.net>, "Rafael J. Wysocki" <rafael@...nel.org>, Danilo
Krummrich <dakr@...nel.org>, Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor
<alex.gaynor@...il.com>, Boqun Feng <boqun.feng@...il.com>, Gary Guo
<gary@...yguo.net>, Björn Roy Baron
<bjorn3_gh@...tonmail.com>, Benno Lossin <benno.lossin@...ton.me>, Andreas
Hindborg <a.hindborg@...nel.org>, Trevor Gross <tmgross@...ch.edu>, open
list <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 2/2] rust/faux: Add missing parent argument to
Registration::new()
On 2025-02-26 09:38, Alice Ryhl wrote:
> On Tue, Feb 25, 2025 at 10:31 PM Lyude Paul <lyude@...hat.com> wrote:
>>
>> A little late in the review of the faux device interface, we added the
>> ability to specify a parent device when creating new faux devices -
>> but
>> this never got ported over to the rust bindings. So, let's add the
>> missing
>> argument now so we don't have to convert other users later down the
>> line.
>>
>> Signed-off-by: Lyude Paul <lyude@...hat.com>
>> Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
>> ---
>> rust/kernel/faux.rs | 10 ++++++++--
>> samples/rust/rust_driver_faux.rs | 2 +-
>> 2 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/rust/kernel/faux.rs b/rust/kernel/faux.rs
>> index 41751403cd868..ae99ea3d114ef 100644
>> --- a/rust/kernel/faux.rs
>> +++ b/rust/kernel/faux.rs
>> @@ -23,11 +23,17 @@
>>
>> impl Registration {
>> /// Create and register a new faux device with the given name.
>> - pub fn new(name: &CStr) -> Result<Self> {
>> + pub fn new(name: &CStr, parent: Option<&device::Device>) ->
>> Result<Self> {
>> // SAFETY:
>> // - `name` is copied by this function into its own storage
>> // - `faux_ops` is safe to leave NULL according to the C API
>> - let dev = unsafe {
>> bindings::faux_device_create(name.as_char_ptr(), null_mut(), null())
>> };
>> + let dev = unsafe {
>> + bindings::faux_device_create(
>> + name.as_char_ptr(),
>> + parent.map_or(null_mut(), |p| p.as_raw()),
>> + null(),
>
> This function signature only requires that `parent` is valid for the
> duration of this call to `new`, but `faux_device_create` stashes a
> pointer without touching the refcount. How do you ensure that the
> `parent` pointer does not become dangling?
I was wondering the same, but it seems that the subsequent device_add()
call takes care of that:
https://elixir.bootlin.com/linux/v6.14-rc3/source/drivers/base/core.c#L3588
device_del() drops the reference.
This makes device->parent only valid for the duration between
faux_device_create() and faux_device_remove().
But this detail shouldn’t be relevant for this API.
Powered by blists - more mailing lists