diff options
Diffstat (limited to 'tools/perf/util/tsc.c')
-rw-r--r-- | tools/perf/util/tsc.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tools/perf/util/tsc.c b/tools/perf/util/tsc.c new file mode 100644 index 000000000000..4d4210d4e13d --- /dev/null +++ b/tools/perf/util/tsc.c | |||
@@ -0,0 +1,30 @@ | |||
1 | #include <linux/compiler.h> | ||
2 | #include <linux/types.h> | ||
3 | |||
4 | #include "tsc.h" | ||
5 | |||
6 | u64 perf_time_to_tsc(u64 ns, struct perf_tsc_conversion *tc) | ||
7 | { | ||
8 | u64 t, quot, rem; | ||
9 | |||
10 | t = ns - tc->time_zero; | ||
11 | quot = t / tc->time_mult; | ||
12 | rem = t % tc->time_mult; | ||
13 | return (quot << tc->time_shift) + | ||
14 | (rem << tc->time_shift) / tc->time_mult; | ||
15 | } | ||
16 | |||
17 | u64 tsc_to_perf_time(u64 cyc, struct perf_tsc_conversion *tc) | ||
18 | { | ||
19 | u64 quot, rem; | ||
20 | |||
21 | quot = cyc >> tc->time_shift; | ||
22 | rem = cyc & ((1 << tc->time_shift) - 1); | ||
23 | return tc->time_zero + quot * tc->time_mult + | ||
24 | ((rem * tc->time_mult) >> tc->time_shift); | ||
25 | } | ||
26 | |||
27 | u64 __weak rdtsc(void) | ||
28 | { | ||
29 | return 0; | ||
30 | } | ||