• Thomas Gleixner's avatar
    x86/vdso: Simplify the invalid vclock case · 4f72adc5
    Thomas Gleixner authored
    The code flow for the vclocks is convoluted as it requires the vclocks
    which can be invalidated separately from the vsyscall_gtod_data sequence to
    store the fact in a separate variable. That's inefficient.
    
    Restructure the code so the vclock readout returns cycles and the
    conversion to nanoseconds is handled at the call site.
    
    If the clock gets invalidated or vclock is already VCLOCK_NONE, return
    U64_MAX as the cycle value, which is invalid for all clocks and leave the
    sequence loop immediately in that case by calling the fallback function
    directly.
    
    This allows to remove the gettimeofday fallback as it now uses the
    clock_gettime() fallback and does the nanoseconds to microseconds
    conversion in the same way as it does when the vclock is functional. It
    does not make a difference whether the division by 1000 happens in the
    kernel fallback or in userspace.
    
    Generates way better code and gains a few cycles back.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarAndy Lutomirski <luto@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Matt Rickard <matt@softrans.com.au>
    Cc: Stephen Boyd <sboyd@kernel.org>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Florian Weimer <fweimer@redhat.com>
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Vitaly Kuznetsov <vkuznets@redhat.com>
    Cc: devel@linuxdriverproject.org
    Cc: virtualization@lists.linux-foundation.org
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Juergen Gross <jgross@suse.com>
    Link: https://lkml.kernel.org/r/20180917130707.657928937@linutronix.de
    4f72adc5
vclock_gettime.c 6.47 KB