Skip to content
  • Borislav Petkov's avatar
    x86/TSC: Use RDTSCP · 093ae8f9
    Borislav Petkov authored
    
    
    Currently, the kernel uses
    
      [LM]FENCE; RDTSC
    
    in the timekeeping code, to guarantee monotonicity of time where the
    *FENCE is selected based on vendor.
    
    Replace that sequence with RDTSCP which is faster or on-par and gives
    the same guarantees.
    
    A microbenchmark on Intel shows that the change is on-par.
    
    On AMD, the change is either on-par with the current LFENCE-prefixed
    RDTSC or slightly better with RDTSCP.
    
    The comparison is done with the LFENCE-prefixed RDTSC (and not with the
    MFENCE-prefixed one, as one would normally expect) because all modern
    AMD families make LFENCE serializing and thus avoid the heavy MFENCE by
    effectively enabling X86_FEATURE_LFENCE_RDTSC.
    
    Co-developed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: x86@kernel.org
    Link: https://lkml.kernel.org/r/20181119184556.11479-1-bp@alien8.de
    093ae8f9