diff options
Diffstat (limited to 'kernel/tools/perf/util/tsc.c')
-rw-r--r-- | kernel/tools/perf/util/tsc.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/kernel/tools/perf/util/tsc.c b/kernel/tools/perf/util/tsc.c new file mode 100644 index 000000000..4d4210d4e --- /dev/null +++ b/kernel/tools/perf/util/tsc.c @@ -0,0 +1,30 @@ +#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; +} |