tsc.c 656 B

12345678910111213141516171819202122232425262728293031
  1. // SPDX-License-Identifier: GPL-2.0
  2. #include <linux/compiler.h>
  3. #include <linux/types.h>
  4. #include "tsc.h"
  5. u64 perf_time_to_tsc(u64 ns, struct perf_tsc_conversion *tc)
  6. {
  7. u64 t, quot, rem;
  8. t = ns - tc->time_zero;
  9. quot = t / tc->time_mult;
  10. rem = t % tc->time_mult;
  11. return (quot << tc->time_shift) +
  12. (rem << tc->time_shift) / tc->time_mult;
  13. }
  14. u64 tsc_to_perf_time(u64 cyc, struct perf_tsc_conversion *tc)
  15. {
  16. u64 quot, rem;
  17. quot = cyc >> tc->time_shift;
  18. rem = cyc & (((u64)1 << tc->time_shift) - 1);
  19. return tc->time_zero + quot * tc->time_mult +
  20. ((rem * tc->time_mult) >> tc->time_shift);
  21. }
  22. u64 __weak rdtsc(void)
  23. {
  24. return 0;
  25. }