Add futex, pipe, timeout subscribers

This commit is contained in:
Wildan M
2026-05-13 10:46:38 +07:00
parent bd44956e96
commit ff11f47404
5 changed files with 29 additions and 3 deletions
+4
View File
@@ -28,6 +28,10 @@ fn registry(token: LockToken<'_, L0>) -> MutexGuard<'_, L1, Registry> {
REGISTRY.lock(token)
}
pub fn get_timeout_stat(token: &mut CleanLockToken) -> usize {
REGISTRY.lock(token.token()).len()
}
pub fn register(
scheme_id: SchemeId,
event_id: usize,
+4
View File
@@ -65,6 +65,10 @@ pub fn pipe(token: &mut CleanLockToken) -> Result<(usize, usize)> {
Ok((id, id | WRITE_NOT_READ_BIT))
}
pub fn get_pipe_stat(token: &mut CleanLockToken) -> usize {
PIPES.read(token.token()).len()
}
pub struct PipeScheme;
impl PipeScheme {
+9 -2
View File
@@ -6,7 +6,7 @@ use crate::{
event::get_event_stat,
percpu::get_all_stats,
sync::CleanLockToken,
syscall::error::Result,
syscall::{error::Result, futex::get_futex_stat},
time::START,
};
use alloc::{string::String, vec::Vec};
@@ -17,6 +17,9 @@ pub fn resource(token: &mut CleanLockToken) -> Result<Vec<u8>> {
let (contexts_alive, contexts_running, contexts_blocked) = get_contexts_stats(token);
let (event_keys, event_subs) = get_event_stat(token);
let (futex_keys, futex_subs) = get_futex_stat(token);
let pipe_subs = crate::scheme::pipe::get_pipe_stat(token);
let timeout_subs = crate::context::timeout::get_timeout_stat(token);
let res = format!(
"{}{}\n\
boot_time: {start_time_sec}\n\
@@ -26,7 +29,11 @@ pub fn resource(token: &mut CleanLockToken) -> Result<Vec<u8>> {
contexts_running: {contexts_running}\n\
contexts_blocked: {contexts_blocked}\n\
event_registries: {event_keys}\n\
event_subcribers: {event_subs}\n",
event_subcribers: {event_subs}\n\
futex_registries: {futex_keys}\n\
futex_subcribers: {futex_subs}\n\
pipe_subcribers: {pipe_subs}\n\
timeout_subscribers: {timeout_subs}\n",
get_cpu_stats(),
get_irq_stats(),
get_context_switch_count(),
+1 -1
View File
@@ -21,7 +21,7 @@ use crate::{
file::{FileDescription, FileDescriptor, InternalFlags, LockedFileDescription},
memory::{
AddrSpace, AddrSpaceWrapper, BorrowedFmapSource, Grant, GrantFileRef, MmapMode,
PageSpan, UnmapResult, UnmapVec, DANGLING,
PageSpan, UnmapVec, DANGLING,
},
BorrowedHtBuf, ContextLock, PreemptGuard, PreemptGuardL1, Status,
},
+11
View File
@@ -52,6 +52,17 @@ pub struct FutexEntry {
static FUTEXES: Mutex<L1, FutexList> =
Mutex::new(FutexList::with_hasher(DefaultHashBuilder::new()));
pub fn get_futex_stat(token: &mut CleanLockToken) -> (usize, usize) {
let mut regc = 0;
let mut regl = 0;
let registry = FUTEXES.lock(token.token());
for (k, v) in registry.iter() {
regl += v.len();
regc += 1;
}
(regc, regl)
}
fn validate_and_translate_virt(space: &AddrSpace, addr: VirtualAddress) -> Option<PhysicalAddress> {
// TODO: Move this elsewhere!
if addr.data().saturating_add(size_of::<usize>()) >= crate::USER_END_OFFSET {