| #include <linux/compiler.h> | |
| #include <linux/types.h> | |
| #include "tsc.h" | |
| u64 perf_time_to_tsc(u64 ns, struct perf_tsc_conversion *tc) | |
| { | |
| u64 t, quot, rem; | |
| t = ns - tc->time_zero; | |
| quot = t / tc->time_mult; | |
| rem = t % tc->time_mult; | |
| return (quot << tc->time_shift) + | |
| (rem << tc->time_shift) / tc->time_mult; | |
| } | |
| u64 tsc_to_perf_time(u64 cyc, struct perf_tsc_conversion *tc) | |
| { | |
| u64 quot, rem; | |
| quot = cyc >> tc->time_shift; | |
| rem = cyc & ((1 << tc->time_shift) - 1); | |
| return tc->time_zero + quot * tc->time_mult + | |
| ((rem * tc->time_mult) >> tc->time_shift); | |
| } | |
| u64 __weak rdtsc(void) | |
| { | |
| return 0; | |
| } |