On 4 November 2015 at 11:26, Daniel Martin <daniel.mar...@secunet.com> wrote: > From: Daniel Martin <consume.no...@gmail.com> > > During PreInit, we just want to inherit the output states from the > kernel. If there's a connected output without an encoder assigned, there > must be a reason for this. Don't try to activate it, treat it as > disconnected for the moment. Because, if we fail to set it up during > PreInit the server will exit. > > rfc..v2: > - changed subject and description, was > "modesetting: Treat inactive outputs as disconnected during PreInit" > - move check above switch (Adam Jackson) > - don't drmModeGetConnector() if !configured, we just did that > - add log message for affected outputs > > Signed-off-by: Daniel Martin <consume.no...@gmail.com> > --- > hw/xfree86/drivers/modesetting/drmmode_display.c | 23 ++++++++++++++++++++--- > 1 file changed, 20 insertions(+), 3 deletions(-) > > diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c > b/hw/xfree86/drivers/modesetting/drmmode_display.c > index 4421578..1a73601 100644 > --- a/hw/xfree86/drivers/modesetting/drmmode_display.c > +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c > @@ -858,13 +858,30 @@ drmmode_output_detect(xf86OutputPtr output) > if (drmmode_output->output_id == -1) > return XF86OutputStatusDisconnected; > > - drmModeFreeConnector(drmmode_output->mode_output); > + if (output->scrn->configured) { > + drmModeFreeConnector(drmmode_output->mode_output); > + > + drmmode_output->mode_output = > + drmModeGetConnector(drmmode->fd, drmmode_output->output_id); > + } /* else, we just fetched connector infos via drmmode_pre_init() */ > > - drmmode_output->mode_output = > - drmModeGetConnector(drmmode->fd, drmmode_output->output_id); > if (!drmmode_output->mode_output) > return XF86OutputStatusDisconnected; > > + /* During PreInit (!configured), we shouldn't try to setup an output > + * where the kernel didn't assigned an encoder yet. > + * First, we just want to inherit the current state and second, if we > + * fail to set it up at this point the server will exit. */ > + if (!output->scrn->configured && > + !drmmode_output->mode_output->encoder_id && > + drmmode_output->mode_output->connection != DRM_MODE_DISCONNECTED) { > + xf86DrvMsg(output->scrn->scrnIndex, X_INFO, > + "Output %s has no encoder assigned, " > + "treat as disconnected during PreInit\n", > + output->name); > + return XF86OutputStatusDisconnected; > + } > + > switch (drmmode_output->mode_output->connection) { > case DRM_MODE_CONNECTED: > status = XF86OutputStatusConnected; > -- > 2.6.1 >
Ping. _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel