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