hw/xfree86: Only report SetDesiredModes() failed if at least one modeset fails

commit 6703a7c7cf
Author: Keith Packard <keithp@keithp.com>
Date:   Tue Jan 8 20:24:32 2013 -0800

    hw/xfree86: Require only one working CRTC to start the server.

changed the logic to try to set the mode on all connected outputs rather
than abort upon the first failure. The return error code was then
tweaked such that it reported success if it set a mode on any crtc.
However, this confuses the headless case where we never enable any crtcs
and also, importantly, never fail to set a crtc.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59190

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Also-written-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Chris Wilson 2013-01-10 03:26:33 +00:00 committed by Keith Packard
parent e779402d53
commit 451ba4bd41

View File

@ -2687,8 +2687,8 @@ xf86SetDesiredModes(ScrnInfoPtr scrn)
{ {
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
xf86CrtcPtr crtc = config->crtc[0]; xf86CrtcPtr crtc = config->crtc[0];
int enabled = 0, failed = 0;
int c; int c;
int enabled = 0;
/* A driver with this hook will take care of this */ /* A driver with this hook will take care of this */
if (!crtc->funcs->set_mode_major) { if (!crtc->funcs->set_mode_major) {
@ -2748,11 +2748,12 @@ xf86SetDesiredModes(ScrnInfoPtr scrn)
if (config->output[o]->crtc == crtc) if (config->output[o]->crtc == crtc)
config->output[o]->crtc = NULL; config->output[o]->crtc = NULL;
crtc->enabled = FALSE; crtc->enabled = FALSE;
++failed;
} }
} }
xf86DisableUnusedFunctions(scrn); xf86DisableUnusedFunctions(scrn);
return enabled != 0; return enabled != 0 || failed == 0;
} }
/** /**