30 lines
598 B
Rust
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
|
|
}
|
|
}
|