mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
perf tools: Allow TSC conversion on any arch
It is possible to record a perf.data file on one architecture and process it on another. Consequently, TSC conversion functions need to be moved out of the arch directory. Signed-off-by: Adrian Hunter <[email protected]> Cc: David Ahern <[email protected]> Cc: Frederic Weisbecker <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Paul Mackerras <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Stephane Eranian <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
This commit is contained in:
parent
ff527bccd4
commit
0b43786081
6 changed files with 40 additions and 26 deletions
|
|
@ -295,6 +295,7 @@ LIB_H += util/intlist.h
|
|||
LIB_H += util/perf_regs.h
|
||||
LIB_H += util/unwind.h
|
||||
LIB_H += util/vdso.h
|
||||
LIB_H += util/tsc.h
|
||||
LIB_H += ui/helpline.h
|
||||
LIB_H += ui/progress.h
|
||||
LIB_H += ui/util.h
|
||||
|
|
@ -374,6 +375,7 @@ LIB_OBJS += $(OUTPUT)util/stat.o
|
|||
LIB_OBJS += $(OUTPUT)util/record.o
|
||||
LIB_OBJS += $(OUTPUT)util/srcline.o
|
||||
LIB_OBJS += $(OUTPUT)util/data.o
|
||||
LIB_OBJS += $(OUTPUT)util/tsc.o
|
||||
|
||||
LIB_OBJS += $(OUTPUT)ui/setup.o
|
||||
LIB_OBJS += $(OUTPUT)ui/helpline.o
|
||||
|
|
|
|||
|
|
@ -6,29 +6,9 @@
|
|||
#include "../../perf.h"
|
||||
#include <linux/types.h>
|
||||
#include "../../util/debug.h"
|
||||
#include "../../util/tsc.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);
|
||||
}
|
||||
|
||||
int perf_read_tsc_conversion(const struct perf_event_mmap_page *pc,
|
||||
struct perf_tsc_conversion *tc)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,7 +14,4 @@ struct perf_event_mmap_page;
|
|||
int perf_read_tsc_conversion(const struct perf_event_mmap_page *pc,
|
||||
struct perf_tsc_conversion *tc);
|
||||
|
||||
u64 perf_time_to_tsc(u64 ns, struct perf_tsc_conversion *tc);
|
||||
u64 tsc_to_perf_time(u64 cyc, struct perf_tsc_conversion *tc);
|
||||
|
||||
#endif /* TOOLS_PERF_ARCH_X86_UTIL_TSC_H__ */
|
||||
|
|
|
|||
|
|
@ -8,10 +8,9 @@
|
|||
#include "evsel.h"
|
||||
#include "thread_map.h"
|
||||
#include "cpumap.h"
|
||||
#include "tsc.h"
|
||||
#include "tests.h"
|
||||
|
||||
#include "../arch/x86/util/tsc.h"
|
||||
|
||||
#define CHECK__(x) { \
|
||||
while ((x) < 0) { \
|
||||
pr_debug(#x " failed!\n"); \
|
||||
|
|
|
|||
25
tools/perf/util/tsc.c
Normal file
25
tools/perf/util/tsc.c
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#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);
|
||||
}
|
||||
11
tools/perf/util/tsc.h
Normal file
11
tools/perf/util/tsc.h
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef __PERF_TSC_H
|
||||
#define __PERF_TSC_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "../arch/x86/util/tsc.h"
|
||||
|
||||
u64 perf_time_to_tsc(u64 ns, struct perf_tsc_conversion *tc);
|
||||
u64 tsc_to_perf_time(u64 cyc, struct perf_tsc_conversion *tc);
|
||||
|
||||
#endif
|
||||
Loading…
Reference in a new issue