Commit 92767af0 authored by Ingo Molnar's avatar Ingo Molnar

x86: fix sched_clock()

[ andi@firstfloor.org: build fix ]
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 6d63de8d
...@@ -196,14 +196,9 @@ int update_persistent_clock(struct timespec now) ...@@ -196,14 +196,9 @@ int update_persistent_clock(struct timespec now)
return set_rtc_mmss(now.tv_sec); return set_rtc_mmss(now.tv_sec);
} }
unsigned long long __vsyscall_fn native_read_tsc(void) unsigned long long native_read_tsc(void)
{ {
DECLARE_ARGS(val, low, high); return __native_read_tsc();
rdtsc_barrier();
asm volatile("rdtsc" : EAX_EDX_RET(val, low, high));
rdtsc_barrier();
return EAX_EDX_VAL(val, low, high);
} }
EXPORT_SYMBOL_GPL(native_read_tsc); EXPORT_SYMBOL(native_read_tsc);
...@@ -93,6 +93,17 @@ static inline int native_write_msr_safe(unsigned int msr, ...@@ -93,6 +93,17 @@ static inline int native_write_msr_safe(unsigned int msr,
extern unsigned long long native_read_tsc(void); extern unsigned long long native_read_tsc(void);
static __always_inline unsigned long long __native_read_tsc(void)
{
DECLARE_ARGS(val, low, high);
rdtsc_barrier();
asm volatile("rdtsc" : EAX_EDX_RET(val, low, high));
rdtsc_barrier();
return EAX_EDX_VAL(val, low, high);
}
static inline unsigned long long native_read_pmc(int counter) static inline unsigned long long native_read_pmc(int counter)
{ {
DECLARE_ARGS(val, low, high); DECLARE_ARGS(val, low, high);
......
...@@ -46,7 +46,7 @@ static inline cycles_t vget_cycles(void) ...@@ -46,7 +46,7 @@ static inline cycles_t vget_cycles(void)
if (!cpu_has_tsc) if (!cpu_has_tsc)
return 0; return 0;
#endif #endif
return (cycles_t) native_read_tsc(); return (cycles_t) __native_read_tsc();
} }
extern void tsc_init(void); extern void tsc_init(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment