diff --git a/src/kxos-frame/src/config.rs b/src/kxos-frame/src/config.rs
index f62b6c64a..99cb14c4a 100644
--- a/src/kxos-frame/src/config.rs
+++ b/src/kxos-frame/src/config.rs
@@ -15,4 +15,4 @@ pub const PAGE_SIZE_BITS: usize = 0xc;
pub const KVA_START: usize = (usize::MAX) << PAGE_SIZE_BITS;
-pub const DEFAULT_LOG_LEVEL: LogLevel = LogLevel::Close;
+pub const DEFAULT_LOG_LEVEL: LogLevel = LogLevel::Info;
diff --git a/src/kxos-frame/src/error.rs b/src/kxos-frame/src/error.rs
index a38e28332..dad88c604 100644
--- a/src/kxos-frame/src/error.rs
+++ b/src/kxos-frame/src/error.rs
@@ -8,4 +8,5 @@ pub enum Error {
IoError,
InvalidVmpermBits,
NotEnoughResources,
+ NoChild,
}
diff --git a/src/kxos-frame/src/sync/rcu/mod.rs b/src/kxos-frame/src/sync/rcu/mod.rs
index 09f3d97c1..d6dccfeac 100644
--- a/src/kxos-frame/src/sync/rcu/mod.rs
+++ b/src/kxos-frame/src/sync/rcu/mod.rs
@@ -4,7 +4,7 @@ use core::marker::PhantomData;
use core::ops::Deref;
use core::sync::atomic::{
AtomicPtr,
- Ordering::{AcqRel, Acquire, Release},
+ Ordering::{AcqRel, Acquire},
};
use self::monitor::RcuMonitor;
@@ -89,7 +89,7 @@ impl
Drop for RcuReclaimer
{
wq.wake_one();
}
});
- wq.wait_until(None::, || Some(0));
+ wq.wait_until(|| Ok(Some(0u8))).unwrap();
}
}
diff --git a/src/kxos-frame/src/sync/wait.rs b/src/kxos-frame/src/sync/wait.rs
index ef3fd0311..c7f23d1bf 100644
--- a/src/kxos-frame/src/sync/wait.rs
+++ b/src/kxos-frame/src/sync/wait.rs
@@ -1,9 +1,11 @@
use core::sync::atomic::{AtomicBool, Ordering};
-use alloc::{collections::VecDeque, sync::Arc, vec::Vec};
+use crate::prelude::*;
+use alloc::{collections::VecDeque, sync::Arc};
+use bitflags::bitflags;
use spin::mutex::Mutex;
-use crate::task::Task;
+use crate::task::schedule;
/// A wait queue.
///
@@ -11,11 +13,11 @@ use crate::task::Task;
/// Multiple threads may be the waiters of a wait queue.
/// Other threads may invoke the `wake`-family methods of a wait queue to
/// wake up one or many waiter threads.
-pub struct WaitQueue {
- waiters: Mutex>>,
+pub struct WaitQueue {
+ waiters: Mutex>>,
}
-impl WaitQueue {
+impl WaitQueue {
/// Creates a new instance.
pub fn new() -> Self {
WaitQueue {
@@ -33,16 +35,22 @@ impl WaitQueue {
///
/// By taking a condition closure, his wait-wakeup mechanism becomes
/// more efficient and robust.
- pub fn wait_until(&self, data: D, mut cond: F) -> R
+ pub fn wait_until(&self, mut cond: F) -> Result
where
- F: FnMut() -> Option,
+ F: FnMut() -> Result