1234567891011121314151617181920212223242526272829303132333435 |
- //! 这个文件实现的是调度过程中涉及到的时钟
- //!
- use crate::{arch::CurrentTimeArch, time::TimeArch};
- pub struct SchedClock;
- impl SchedClock {
- #[inline]
- pub fn sched_clock_cpu(_cpu: usize) -> u64 {
- #[cfg(target_arch = "x86_64")]
- {
- if crate::arch::driver::tsc::TSCManager::cpu_khz() == 0 {
- // TSC not calibrated yet
- return 0;
- }
- return CurrentTimeArch::cycles2ns(CurrentTimeArch::get_cycles()) as u64;
- }
- #[cfg(target_arch = "riscv64")]
- {
- return CurrentTimeArch::cycles2ns(CurrentTimeArch::get_cycles()) as u64;
- }
- }
- }
- bitflags! {
- pub struct ClockUpdataFlag: u8 {
- /// 请求在下一次调用 __schedule() 时跳过时钟更新
- const RQCF_REQ_SKIP = 0x01;
- /// 表示跳过时钟更新正在生效,update_rq_clock() 的调用将被忽略。
- const RQCF_ACT_SKIP = 0x02;
- /// 调试标志,指示自上次固定 rq::lock 以来是否已调用过
- const RQCF_UPDATE = 0x04;
- }
- }
|