Commit 49dc3201 authored by Robert Beckett's avatar Robert Beckett Committed by Daniel Stone

backend-drm: dont emit sesion signal if already at same state

logind will send a device changed at start of day, prompting a session
active change, but the session will already be active from compositor
creation.

Avoid unnecessary signal emition and drm state invalidation.

The logind launcher sets the session active when the graphics device is
assigned to weston from systemd. Unfortunately 8d23ab78 didnt check whether the
session was already active before setting it active and emitting the session
active signal.
The handler for that signal then proceeds to invalidate the entire graphics
state, causing the next redraw to reconfigure all outputs (to the same routing
as they were already).
This then massively increases the likelihood of trying to configure a crtc that
has a commit already in flight.

Add the old behaviour of only emitting a signal on a changed state.
This avoids the issue for now by reducing the chances of a clash. Future
work will need to fix the issue properly (better handling of state_invalid e.g.
wait for quiescence, better monitoring for crtc usage clashes etc).
Signed-off-by: Robert Beckett's avatarRobert Beckett <bob.beckett@collabora.com>
parent c569bdc2
......@@ -2564,7 +2564,8 @@ drm_device_changed(struct weston_compositor *compositor,
{
struct drm_backend *b = to_drm_backend(compositor);
if (b->drm.fd < 0 || b->drm.devnum != device)
if (b->drm.fd < 0 || b->drm.devnum != device ||
compositor->session_active == added)
return;
compositor->session_active = added;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment