[PATCH] x86: Use RDTSCP for synchronous get_cycles if possible
RDTSCP is already synchronous and doesn't need an explicit CPUID. This is a little faster and more importantly avoids VMEXITs on Hypervisors. Original patch from Joerg Roedel, but reworked by AK Also includes miscompilation fix by Eric Biederman Cc: "Joerg Roedel" <joerg.roedel@amd.com> Signed-off-by: Andi Kleen <ak@suse.de>
This commit is contained in:
parent
9bccb23dc5
commit
c5bcb5635a
|
@ -37,6 +37,15 @@ static __always_inline cycles_t get_cycles_sync(void)
|
|||
unsigned long long ret;
|
||||
unsigned eax;
|
||||
|
||||
/*
|
||||
* Use RDTSCP if possible; it is guaranteed to be synchronous
|
||||
* and doesn't cause a VMEXIT on Hypervisors
|
||||
*/
|
||||
alternative_io(ASM_NOP3, ".byte 0x0f,0x01,0xf9", X86_FEATURE_RDTSCP,
|
||||
"=A" (ret), "0" (0ULL) : "ecx", "memory");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Don't do an additional sync on CPUs where we know
|
||||
* RDTSC is already synchronous:
|
||||
|
|
Loading…
Reference in New Issue