Add futex, pipe, timeout subscribers
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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,
|
||||
},
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user