diff options
Diffstat (limited to 'rust/kernel')
| -rw-r--r-- | rust/kernel/drm/device.rs | 12 | ||||
| -rw-r--r-- | rust/kernel/drm/driver.rs | 1 | ||||
| -rw-r--r-- | rust/kernel/firmware.rs | 2 | ||||
| -rw-r--r-- | rust/kernel/init.rs | 8 | ||||
| -rw-r--r-- | rust/kernel/kunit.rs | 2 | ||||
| -rw-r--r-- | rust/kernel/lib.rs | 3 | 
6 files changed, 20 insertions, 8 deletions
diff --git a/rust/kernel/drm/device.rs b/rust/kernel/drm/device.rs index 624d7a4c83ea..14c1aa402951 100644 --- a/rust/kernel/drm/device.rs +++ b/rust/kernel/drm/device.rs @@ -66,7 +66,7 @@ impl<T: drm::Driver> Device<T> {          open: Some(drm::File::<T::File>::open_callback),          postclose: Some(drm::File::<T::File>::postclose_callback),          unload: None, -        release: None, +        release: Some(Self::release),          master_set: None,          master_drop: None,          debugfs_init: None, @@ -162,6 +162,16 @@ impl<T: drm::Driver> Device<T> {          // SAFETY: `ptr` is valid by the safety requirements of this function.          unsafe { &*ptr.cast() }      } + +    extern "C" fn release(ptr: *mut bindings::drm_device) { +        // SAFETY: `ptr` is a valid pointer to a `struct drm_device` and embedded in `Self`. +        let this = unsafe { Self::from_drm_device(ptr) }; + +        // SAFETY: +        // - When `release` runs it is guaranteed that there is no further access to `this`. +        // - `this` is valid for dropping. +        unsafe { core::ptr::drop_in_place(this) }; +    }  }  impl<T: drm::Driver> Deref for Device<T> { diff --git a/rust/kernel/drm/driver.rs b/rust/kernel/drm/driver.rs index acb638086131..af93d46d03d3 100644 --- a/rust/kernel/drm/driver.rs +++ b/rust/kernel/drm/driver.rs @@ -10,7 +10,6 @@ use crate::{      drm,      error::{to_result, Result},      prelude::*, -    str::CStr,      types::ARef,  };  use macros::vtable; diff --git a/rust/kernel/firmware.rs b/rust/kernel/firmware.rs index 2494c96e105f..4fe621f35716 100644 --- a/rust/kernel/firmware.rs +++ b/rust/kernel/firmware.rs @@ -202,7 +202,7 @@ macro_rules! module_firmware {              };              #[link_section = ".modinfo"] -            #[used] +            #[used(compiler)]              static __MODULE_FIRMWARE: [u8; $($builder)*::create(__MODULE_FIRMWARE_PREFIX)                  .build_length()] = $($builder)*::create(__MODULE_FIRMWARE_PREFIX).build();          }; diff --git a/rust/kernel/init.rs b/rust/kernel/init.rs index 8d228c237954..21ef202ab0db 100644 --- a/rust/kernel/init.rs +++ b/rust/kernel/init.rs @@ -231,14 +231,14 @@ macro_rules! try_init {      ($(&$this:ident in)? $t:ident $(::<$($generics:ty),* $(,)?>)? {          $($fields:tt)*      }) => { -        ::pin_init::try_init!($(&$this in)? $t $(::<$($generics),* $(,)?>)? { +        ::pin_init::try_init!($(&$this in)? $t $(::<$($generics),*>)? {              $($fields)*          }? $crate::error::Error)      };      ($(&$this:ident in)? $t:ident $(::<$($generics:ty),* $(,)?>)? {          $($fields:tt)*      }? $err:ty) => { -        ::pin_init::try_init!($(&$this in)? $t $(::<$($generics),* $(,)?>)? { +        ::pin_init::try_init!($(&$this in)? $t $(::<$($generics),*>)? {              $($fields)*          }? $err)      }; @@ -291,14 +291,14 @@ macro_rules! try_pin_init {      ($(&$this:ident in)? $t:ident $(::<$($generics:ty),* $(,)?>)? {          $($fields:tt)*      }) => { -        ::pin_init::try_pin_init!($(&$this in)? $t $(::<$($generics),* $(,)?>)? { +        ::pin_init::try_pin_init!($(&$this in)? $t $(::<$($generics),*>)? {              $($fields)*          }? $crate::error::Error)      };      ($(&$this:ident in)? $t:ident $(::<$($generics:ty),* $(,)?>)? {          $($fields:tt)*      }? $err:ty) => { -        ::pin_init::try_pin_init!($(&$this in)? $t $(::<$($generics),* $(,)?>)? { +        ::pin_init::try_pin_init!($(&$this in)? $t $(::<$($generics),*>)? {              $($fields)*          }? $err)      }; diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs index 4b8cdcb21e77..b9e65905e121 100644 --- a/rust/kernel/kunit.rs +++ b/rust/kernel/kunit.rs @@ -302,7 +302,7 @@ macro_rules! kunit_unsafe_test_suite {                      is_init: false,                  }; -            #[used] +            #[used(compiler)]              #[allow(unused_unsafe)]              #[cfg_attr(not(target_os = "macos"), link_section = ".kunit_test_suites")]              static mut KUNIT_TEST_SUITE_ENTRY: *const ::kernel::bindings::kunit_suite = diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index 6b4774b2b1c3..e13d6ed88fa6 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -34,6 +34,9 @@  // Expected to become stable.  #![feature(arbitrary_self_types)]  // +// To be determined. +#![feature(used_with_arg)] +//  // `feature(derive_coerce_pointee)` is expected to become stable. Before Rust  // 1.84.0, it did not exist, so enable the predecessor features.  #![cfg_attr(CONFIG_RUSTC_HAS_COERCE_POINTEE, feature(derive_coerce_pointee))]  | 
