Trait kernel::workqueue::HasWork

source ·
pub unsafe trait HasWork<T, const ID: u64 = 0> {
    // Required methods
    unsafe fn raw_get_work(ptr: *mut Self) -> *mut Work<T, ID>;
    unsafe fn work_container_of(ptr: *mut Work<T, ID>) -> *mut Self;
}
Expand description

Declares that a type has a Work<T, ID> field.

The intended way of using this trait is via the impl_has_work! macro. You can use the macro like this:

use kernel::workqueue::{impl_has_work, Work};

struct MyWorkItem {
    work_field: Work<MyWorkItem, 1>,
}

impl_has_work! {
    impl HasWork<MyWorkItem, 1> for MyWorkItem { self.work_field }
}

Note that since the Work type is annotated with an id, you can have several work_struct fields by using a different id for each one.

§Safety

The methods raw_get_work and work_container_of must return valid pointers and must be true inverses of each other; that is, they must satisfy the following invariants:

  • work_container_of(raw_get_work(ptr)) == ptr for any ptr: *mut Self.
  • raw_get_work(work_container_of(ptr)) == ptr for any ptr: *mut Work<T, ID>.

Required Methods§

source

unsafe fn raw_get_work(ptr: *mut Self) -> *mut Work<T, ID>

Returns a pointer to the Work<T, ID> field.

§Safety

The provided pointer must point at a valid struct of type Self.

source

unsafe fn work_container_of(ptr: *mut Work<T, ID>) -> *mut Self

Returns a pointer to the struct containing the Work<T, ID> field.

§Safety

The pointer must point at a Work<T, ID> field in a struct of type Self.

Object Safety§

This trait is not object safe.

Implementors§