backend-drm: improve atomic commit failure handling
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:
Michael Olbrich <m.olbrich@pengutronix.de>
parent
d4eafbaa
No related branches found
No related tags found
Pipeline #654888 passed
Stage: Base container
Stage: Full build and test
Stage: No-GL build and test
Stage: Other builds
Stage: pages
Stage: deploy
Loading
Please register or sign in to comment