xref: /DragonOS/kernel/src/sched/clock.rs (revision 2eab6dd743e94a86a685f1f3c01e599adf86610a)
1 //! 这个文件实现的是调度过程中涉及到的时钟
2 //!
3 use crate::{arch::CurrentTimeArch, time::TimeArch};
4 
5 pub struct SchedClock;
6 
7 impl SchedClock {
8     #[inline]
9     pub fn sched_clock_cpu(_cpu: usize) -> u64 {
10         #[cfg(target_arch = "x86_64")]
11         {
12             if crate::arch::driver::tsc::TSCManager::cpu_khz() == 0 {
13                 // TSC not calibrated yet
14                 return 0;
15             }
16             return CurrentTimeArch::cycles2ns(CurrentTimeArch::get_cycles()) as u64;
17         }
18 
19         #[cfg(target_arch = "riscv64")]
20         {
21             return CurrentTimeArch::cycles2ns(CurrentTimeArch::get_cycles()) as u64;
22         }
23     }
24 }
25 
26 bitflags! {
27     pub struct ClockUpdataFlag: u8 {
28         /// 请求在下一次调用 __schedule() 时跳过时钟更新
29         const RQCF_REQ_SKIP = 0x01;
30         /// 表示跳过时钟更新正在生效,update_rq_clock() 的调用将被忽略。
31         const RQCF_ACT_SKIP = 0x02;
32         /// 调试标志,指示自上次固定 rq::lock 以来是否已调用过
33         const RQCF_UPDATE = 0x04;
34     }
35 }
36