| 
									
										
										
										
											2014-07-14 13:03:03 +03:00
										 |  |  | #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); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-07-22 16:17:32 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | u64 __weak rdtsc(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | } |