| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | #![no_std]/// Wait for a condition to become true.////// This macro will wait for a condition to become true.////// ## Parameters////// - `$wq`: The wait queue to wait on./// - `$condition`: The condition to wait for. (you can pass a function or a boolean expression)/// - `$cmd`: The command to execute while waiting.#[macro_export]macro_rules! wq_wait_event_interruptible {    ($wq:expr, $condition: expr, $cmd: expr) => {{        let mut retval = Ok(());        if !$condition {            retval = wait_queue_macros::_wq_wait_event_interruptible!($wq, $condition, $cmd);        }        retval    }};}#[macro_export]#[allow(clippy::crate_in_macro_def)]macro_rules! _wq_wait_event_interruptible {    ($wq:expr, $condition: expr, $cmd: expr) => {{        wait_queue_macros::__wq_wait_event!($wq, $condition, true, Ok(()), {            $cmd;            crate::sched::schedule(SchedMode::SM_NONE)        })    }};}#[macro_export]macro_rules! __wq_wait_event(    ($wq:expr, $condition: expr, $interruptible: expr, $ret: expr, $cmd:expr) => {{        let mut retval = $ret;        let mut exec_finish_wait = true;        loop {            let x = $wq.prepare_to_wait_event($interruptible);            if $condition {                break;            }            if $interruptible && !x.is_ok() {                retval = x;                exec_finish_wait = false;                break;            }            $cmd;        }        if exec_finish_wait {            $wq.finish_wait();        }        retval    }};);
 |