Skip to content
  • Michael Olbrich's avatar
    backend-drm: improve atomic commit failure handling · 3b3fdc52
    Michael Olbrich authored
    
    
    When an atomic commit fails then the output will be stuck in
    REPAINT_AWAITING_COMPLETION state. It is waiting for a vblank event that was
    never scheduled.
    If the error is EBUSY then it can be expected to be a transient error. So
    propagate the error and schedule a new repaint in the core compositor.
    
    This is necessary because there are some circumstances when the commit can fail
    unexpectedly:
    - With 'state_invalid == true' one commit will disable all planes. If another
      commit for a different output is triggered immediately afterwards, then this
      commit can temporarily fail with EBUSY because it tries to use the same
      planes.
    - At least with i915, if one commit enables an output then a second commit for a
      different output immediately afterwards can temporarily fail with EBUSY. This
      is probably caused by some hardware interdependency.
    
    Signed-off-by: default avatarMichael Olbrich <m.olbrich@pengutronix.de>
    3b3fdc52