lkml.org 
[lkml]   [2023]   [Feb]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 2/5] rust: device: Add a minimal RawDevice trait
    From: Wedson Almeida Filho <wedsonaf@gmail.com>

    Add a RawDevice trait which can be implemented by any type representing
    a device class (such as a PlatformDevice). This is the minimum amount of
    Device support code required to unblock abstractions that need to take
    device pointers.

    Lina: Rewrote commit message, and dropped everything except RawDevice.

    Co-developed-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Wedson Almeida Filho <wedsonaf@gmail.com>
    Signed-off-by: Asahi Lina <lina@asahilina.net>
    ---
    rust/bindings/bindings_helper.h | 1 +
    rust/kernel/device.rs | 23 +++++++++++++++++++++++
    rust/kernel/lib.rs | 1 +
    3 files changed, 25 insertions(+)

    diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h
    index 75d85bd6c592..3632a39a28a6 100644
    --- a/rust/bindings/bindings_helper.h
    +++ b/rust/bindings/bindings_helper.h
    @@ -6,6 +6,7 @@
    * Sorted alphabetically.
    */

    +#include <linux/device.h>
    #include <linux/slab.h>
    #include <linux/refcount.h>

    diff --git a/rust/kernel/device.rs b/rust/kernel/device.rs
    new file mode 100644
    index 000000000000..9be021e393ca
    --- /dev/null
    +++ b/rust/kernel/device.rs
    @@ -0,0 +1,23 @@
    +// SPDX-License-Identifier: GPL-2.0
    +
    +//! Generic devices that are part of the kernel's driver model.
    +//!
    +//! C header: [`include/linux/device.h`](../../../../include/linux/device.h)
    +
    +use crate::bindings;
    +
    +/// A raw device.
    +///
    +/// # Safety
    +///
    +/// Implementers must ensure that the `*mut device` returned by [`RawDevice::raw_device`] is
    +/// related to `self`, that is, actions on it will affect `self`. For example, if one calls
    +/// `get_device`, then the refcount on the device represented by `self` will be incremented.
    +///
    +/// Additionally, implementers must ensure that the device is never renamed. Commit a5462516aa99
    +/// ("driver-core: document restrictions on device_rename()") has details on why `device_rename`
    +/// should not be used.
    +pub unsafe trait RawDevice {
    + /// Returns the raw `struct device` related to `self`.
    + fn raw_device(&self) -> *mut bindings::device;
    +}
    diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
    index 82dff6f4cf60..de44092718f8 100644
    --- a/rust/kernel/lib.rs
    +++ b/rust/kernel/lib.rs
    @@ -29,6 +29,7 @@ compile_error!("Missing kernel configuration for conditional compilation");
    #[cfg(not(testlib))]
    mod allocator;
    mod build_assert;
    +pub mod device;
    pub mod error;
    pub mod prelude;
    pub mod print;
    --
    2.35.1

    \
     
     \ /
      Last update: 2023-03-27 00:34    [W:2.732 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site