// yet another kernel's container_of macro for Rust #[macro_export] macro_rules! container_of { ($ptr:expr, $type:ty, $field:ident) => { ($ptr as *const _ as *const u8).sub(core::mem::offset_of!($type, $field) as usize) as *const $type }; } #[macro_export] macro_rules! container_of_offset { ($ptr:expr, $type:ty, $offset:expr) => { ($ptr as *const _ as *const u8).sub($offset) as *const $type }; } #[macro_export] macro_rules! to_field_offset { ($ptr:expr, $type:ty, $offset:expr) => { ($ptr as *const _ as *const u8).add($offset) as *const $type }; }