[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