[PATCH xserver] modesetting: Just inherit output states during PreInit
Daniel Martin
consume.noise at gmail.com
Wed Dec 2 00:17:13 PST 2015
On 4 November 2015 at 11:26, Daniel Martin <daniel.martin at secunet.com> wrote:
> From: Daniel Martin <consume.noise at 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.noise at 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.
More information about the xorg-devel
mailing list