• Arnd Bergmann's avatar
    drm: vblank: use ktime_t instead of timeval · 67680d3c
    Arnd Bergmann authored
    The drm vblank handling uses 'timeval' to store timestamps in either
    monotonic or wall-clock time base. In either case, it reads the current
    time as a ktime_t in get_drm_timestamp() and converts it from there.
    
    This is a bit suspicious, as users of 'timeval' often suffer from
    the time_t overflow in y2038. I have gone through this code and
    found that it is unlikely to cause problems here:
    
    - The user space ABI does not use time_t or timeval, but uses
      'u32' and 'long' as the types. This means at least that rebuilding
      user programs against a new libc with 64-bit time_t does not
      change the ABI.
    
    - As of commit c61eef72 ("drm: add support for monotonic vblank
      timestamps") in linux-3.8, the monotonic timestamp is the default
      and can only get reverted to wall-clock through a module-parameter.
    
    - With the default monotonic timestamps, there is no problem at all.
    
    - The drm_wait_vblank_ioctl() interface is alway safe on 64-bit
      architectures, on 32-bit it might overflow the 'long' timestamps
      in 2038 with wall-clock timestamps.
    
    - The event handling uses 'u32' seconds, which overflow in 2106
      on both 32-bit and 64-bit machines, when wall-clock timestamps
      are used.
    
    - The effect of overflowing either of the two is only temporary
      (during the overflow, and is likely to keep working again
      afterwards. It is likely the same problem as observing a
      'settimeofday()' call, which was the reason for moving to the
      monotonic timestamps in the first place.
    
    Overall, this seems good enough, so my patch removes the use of
    'timeval' from the vblank handling altogether and uses ktime_t
    consistently, except for the part where we copy the data to user
    space structures in the existing format.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
    Reviewed-by: default avatarKeith Packard <keithp@keithp.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    67680d3c
drm_vblank.h 6.07 KB