clock.rs 1.1 KB

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