use crate::mem::address::PhysAddr; use core::sync::atomic::{AtomicUsize, Ordering}; #[derive(Debug)] pub enum ObjectType { Untyped, Frame, CNode, ThreadBlock, PageTable, } pub struct KernelObject { pub phys_addr: PhysAddr, pub size_bits: u8, pub obj_type: ObjectType, pub ref_count: AtomicUsize, pub owner_id: u64, } impl KernelObject { pub fn add_ref(&self) { self.ref_count.fetch_add(1, Ordering::Relaxed); } pub fn release(&self) -> bool { self.ref_count.fetch_sub(1, Ordering::Release) == 1 } }