Files
Elyz/kernel/src/cap/object.rs

30 lines
598 B
Rust

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
}
}