Skip to content
  • Emmanuel Gil Peyrot's avatar
    compositor-drm: pageflip timeout implementation · 11ae2a30
    Emmanuel Gil Peyrot authored and Pekka Paalanen's avatar Pekka Paalanen committed
    Weston will not repaint until previous update has been acked by a
    pageflip event coming from the drm driver. However, some buggy drivers
    won’t return those events or will stop sending them at some point and
    Weston output repaints will completely freeze. To ease developers’ task
    in testing their drivers, this patch makes compositor-drm use a timer
    to detect cases where those pageflip events stop coming.
    
    This timeout implementation is software only and includes basic
    features usually found in a watchdog. We simply exit Weston gracefully
    with a log message and an exit code when the timout is reached.
    
    The timeout value can be set via weston.ini by adding a
    pageflip-timeout=<MILLISECONDS> entry under [core]
    section. Setting it to 0 disables the timeout feature.
    
    v2:
    - Made sure we would get both the pageflip and the vblank events before
      stopping the timer.
    - Reordered the error and success cases in
      drm_output_pageflip_timer_create() to be more in line with the rest
      of the code.
    
    v3:
    - Reordered (de)arming of the timer with the code around it to avoid it
      being rearmed before the current dearming.
    - Return the proper value for the dispatcher in the pageflip_timeout
      callback.
    - Also display the output name in case the timer fires.
    
    v4:
    - Reordered a forgotten timer rearming after its drmModePageFlip().
    
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=83884
    
    
    Signed-off-by: Frederic Plourde <frederic.plourde at collabora.co.uk>
    Signed-off-by: default avatarEmmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>
    Reviewed-by: default avatarDaniel Stone <daniels@collabora.com>
    Reviewed-by: default avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
    11ae2a30