Commit e283ee23 authored by Alice Ryhl's avatar Alice Ryhl Committed by Miguel Ojeda

rust: kernel: add reexports for macros

Currently, all macros are reexported with #[macro_export] only, which
means that to access `new_work!` from the workqueue, you need to import
it from the path `kernel::new_work` instead of importing it from the
workqueue module like all other items in the workqueue. By adding
reexports of the macros, it becomes possible to import the macros from
the correct modules.

It's still possible to import the macros from the root, but I don't
think we can do anything about that.

There is no functional change. This is merely a code cleanliness
improvement.
Signed-off-by: default avatarAlice Ryhl <aliceryhl@google.com>
Reviewed-by: default avatarTrevor Gross <tmgross@umich.edu>
Reviewed-by: default avatarMartin Rodriguez Reboredo <yakoyoku@gmail.com>
Tested-by: default avatarBoqun Feng <boqun.feng@gmail.com>
Link: https://lore.kernel.org/r/20240129145837.1419880-1-aliceryhl@google.com
[ Removed new `use kernel::prelude::*`s, reworded title. ]
Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
parent ed6d0bed
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
//! //!
//! ```rust //! ```rust
//! # #![allow(clippy::disallowed_names)] //! # #![allow(clippy::disallowed_names)]
//! use kernel::{prelude::*, sync::Mutex, new_mutex}; //! use kernel::sync::{new_mutex, Mutex};
//! # use core::pin::Pin; //! # use core::pin::Pin;
//! #[pin_data] //! #[pin_data]
//! struct Foo { //! struct Foo {
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
//! //!
//! ```rust //! ```rust
//! # #![allow(clippy::disallowed_names)] //! # #![allow(clippy::disallowed_names)]
//! # use kernel::{prelude::*, sync::Mutex, new_mutex}; //! # use kernel::sync::{new_mutex, Mutex};
//! # use core::pin::Pin; //! # use core::pin::Pin;
//! # #[pin_data] //! # #[pin_data]
//! # struct Foo { //! # struct Foo {
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
//! above method only works for types where you can access the fields. //! above method only works for types where you can access the fields.
//! //!
//! ```rust //! ```rust
//! # use kernel::{new_mutex, sync::{Arc, Mutex}}; //! # use kernel::sync::{new_mutex, Arc, Mutex};
//! let mtx: Result<Arc<Mutex<usize>>> = Arc::pin_init(new_mutex!(42, "example::mtx")); //! let mtx: Result<Arc<Mutex<usize>>> = Arc::pin_init(new_mutex!(42, "example::mtx"));
//! ``` //! ```
//! //!
......
...@@ -13,8 +13,9 @@ ...@@ -13,8 +13,9 @@
mod locked_by; mod locked_by;
pub use arc::{Arc, ArcBorrow, UniqueArc}; pub use arc::{Arc, ArcBorrow, UniqueArc};
pub use condvar::{CondVar, CondVarTimeoutResult}; pub use condvar::{new_condvar, CondVar, CondVarTimeoutResult};
pub use lock::{mutex::Mutex, spinlock::SpinLock}; pub use lock::mutex::{new_mutex, Mutex};
pub use lock::spinlock::{new_spinlock, SpinLock};
pub use locked_by::LockedBy; pub use locked_by::LockedBy;
/// Represents a lockdep class. It's a wrapper around C's `lock_class_key`. /// Represents a lockdep class. It's a wrapper around C's `lock_class_key`.
......
...@@ -27,6 +27,7 @@ macro_rules! new_condvar { ...@@ -27,6 +27,7 @@ macro_rules! new_condvar {
$crate::sync::CondVar::new($crate::optional_name!($($name)?), $crate::static_lock_class!()) $crate::sync::CondVar::new($crate::optional_name!($($name)?), $crate::static_lock_class!())
}; };
} }
pub use new_condvar;
/// A conditional variable. /// A conditional variable.
/// ///
...@@ -44,8 +45,7 @@ macro_rules! new_condvar { ...@@ -44,8 +45,7 @@ macro_rules! new_condvar {
/// The following is an example of using a condvar with a mutex: /// The following is an example of using a condvar with a mutex:
/// ///
/// ``` /// ```
/// use kernel::sync::{CondVar, Mutex}; /// use kernel::sync::{new_condvar, new_mutex, CondVar, Mutex};
/// use kernel::{new_condvar, new_mutex};
/// ///
/// #[pin_data] /// #[pin_data]
/// pub struct Example { /// pub struct Example {
......
...@@ -17,6 +17,7 @@ macro_rules! new_mutex { ...@@ -17,6 +17,7 @@ macro_rules! new_mutex {
$inner, $crate::optional_name!($($name)?), $crate::static_lock_class!()) $inner, $crate::optional_name!($($name)?), $crate::static_lock_class!())
}; };
} }
pub use new_mutex;
/// A mutual exclusion primitive. /// A mutual exclusion primitive.
/// ///
...@@ -35,7 +36,7 @@ macro_rules! new_mutex { ...@@ -35,7 +36,7 @@ macro_rules! new_mutex {
/// contains an inner struct (`Inner`) that is protected by a mutex. /// contains an inner struct (`Inner`) that is protected by a mutex.
/// ///
/// ``` /// ```
/// use kernel::{init::InPlaceInit, init::PinInit, new_mutex, pin_init, sync::Mutex}; /// use kernel::sync::{new_mutex, Mutex};
/// ///
/// struct Inner { /// struct Inner {
/// a: u32, /// a: u32,
......
...@@ -17,6 +17,7 @@ macro_rules! new_spinlock { ...@@ -17,6 +17,7 @@ macro_rules! new_spinlock {
$inner, $crate::optional_name!($($name)?), $crate::static_lock_class!()) $inner, $crate::optional_name!($($name)?), $crate::static_lock_class!())
}; };
} }
pub use new_spinlock;
/// A spinlock. /// A spinlock.
/// ///
...@@ -33,7 +34,7 @@ macro_rules! new_spinlock { ...@@ -33,7 +34,7 @@ macro_rules! new_spinlock {
/// contains an inner struct (`Inner`) that is protected by a spinlock. /// contains an inner struct (`Inner`) that is protected by a spinlock.
/// ///
/// ``` /// ```
/// use kernel::{init::InPlaceInit, init::PinInit, new_spinlock, pin_init, sync::SpinLock}; /// use kernel::sync::{new_spinlock, SpinLock};
/// ///
/// struct Inner { /// struct Inner {
/// a: u32, /// a: u32,
......
...@@ -35,8 +35,7 @@ ...@@ -35,8 +35,7 @@
//! ``` //! ```
//! use kernel::prelude::*; //! use kernel::prelude::*;
//! use kernel::sync::Arc; //! use kernel::sync::Arc;
//! use kernel::workqueue::{self, Work, WorkItem}; //! use kernel::workqueue::{self, impl_has_work, new_work, Work, WorkItem};
//! use kernel::{impl_has_work, new_work};
//! //!
//! #[pin_data] //! #[pin_data]
//! struct MyStruct { //! struct MyStruct {
...@@ -78,8 +77,7 @@ ...@@ -78,8 +77,7 @@
//! ``` //! ```
//! use kernel::prelude::*; //! use kernel::prelude::*;
//! use kernel::sync::Arc; //! use kernel::sync::Arc;
//! use kernel::workqueue::{self, Work, WorkItem}; //! use kernel::workqueue::{self, impl_has_work, new_work, Work, WorkItem};
//! use kernel::{impl_has_work, new_work};
//! //!
//! #[pin_data] //! #[pin_data]
//! struct MyStruct { //! struct MyStruct {
...@@ -147,6 +145,7 @@ macro_rules! new_work { ...@@ -147,6 +145,7 @@ macro_rules! new_work {
$crate::workqueue::Work::new($crate::optional_name!($($name)?), $crate::static_lock_class!()) $crate::workqueue::Work::new($crate::optional_name!($($name)?), $crate::static_lock_class!())
}; };
} }
pub use new_work;
/// A kernel work queue. /// A kernel work queue.
/// ///
...@@ -405,9 +404,8 @@ pub unsafe fn raw_get(ptr: *const Self) -> *mut bindings::work_struct { ...@@ -405,9 +404,8 @@ pub unsafe fn raw_get(ptr: *const Self) -> *mut bindings::work_struct {
/// like this: /// like this:
/// ///
/// ```no_run /// ```no_run
/// use kernel::impl_has_work;
/// use kernel::prelude::*; /// use kernel::prelude::*;
/// use kernel::workqueue::Work; /// use kernel::workqueue::{impl_has_work, Work};
/// ///
/// struct MyWorkItem { /// struct MyWorkItem {
/// work_field: Work<MyWorkItem, 1>, /// work_field: Work<MyWorkItem, 1>,
...@@ -475,9 +473,8 @@ unsafe fn work_container_of(ptr: *mut Work<T, ID>) -> *mut Self ...@@ -475,9 +473,8 @@ unsafe fn work_container_of(ptr: *mut Work<T, ID>) -> *mut Self
/// # Examples /// # Examples
/// ///
/// ``` /// ```
/// use kernel::impl_has_work;
/// use kernel::sync::Arc; /// use kernel::sync::Arc;
/// use kernel::workqueue::{self, Work}; /// use kernel::workqueue::{self, impl_has_work, Work};
/// ///
/// struct MyStruct { /// struct MyStruct {
/// work_field: Work<MyStruct, 17>, /// work_field: Work<MyStruct, 17>,
...@@ -509,6 +506,7 @@ unsafe fn raw_get_work(ptr: *mut Self) -> *mut $crate::workqueue::Work<$work_typ ...@@ -509,6 +506,7 @@ unsafe fn raw_get_work(ptr: *mut Self) -> *mut $crate::workqueue::Work<$work_typ
} }
)*}; )*};
} }
pub use impl_has_work;
impl_has_work! { impl_has_work! {
impl<T> HasWork<Self> for ClosureWork<T> { self.work } impl<T> HasWork<Self> for ClosureWork<T> { self.work }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment