Skip to content

backend-drm: improve atomic commit failure handling

Michael Olbrich requested to merge mol/weston:drm-atomic-busy into main

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 call weston_output_repaint_failed() to reset the state. The next update will then trigger a new commit that will hopefully succeed.

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.

Merge request reports