Re: [PATCH 3.14 42/79] drm/qxl: only report first monitor as connected if we have no state

From: Jiri Slaby
Date: Fri May 27 2016 - 07:06:33 EST


On 10/18/2015, 04:05 AM, Greg Kroah-Hartman wrote:
> 3.14-stable review patch. If anyone has any objections, please let me know.
>
> ------------------
>
> From: Dave Airlie <airlied@xxxxxxxxxx>
>
> commit 69e5d3f893e19613486f300fd6e631810338aa4b upstream.
>
> If the server isn't new enough to give us state, report the first
> monitor as always connected, otherwise believe the server side.

Hi,

I've got a bug report, that this commit breaks 3.12-stable:
===============
While testing KDE5 packages which will be landing in Package Hub for
SP1, we found a issue with qxl drm driver in kernel.

When booting SLES (or SLED) 12 SP1, in a libvirt KVM environment, with
QXL as video driver, KDE5 plasma was not rendered on screen, you could
only see mouse cursor.

Booting with nomodeset=1 or qxl.modeset=0 fixes the issue.
===============

Does it make sense? Is 3.12 missing some prerequisite? Or should we just
revert the commit in 3.12? And what about 3.14, 4.1?

Thanks.

> Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx>
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
>
> ---
> drivers/gpu/drm/qxl/qxl_display.c | 12 +++++++-----
> 1 file changed, 7 insertions(+), 5 deletions(-)
>
> --- a/drivers/gpu/drm/qxl/qxl_display.c
> +++ b/drivers/gpu/drm/qxl/qxl_display.c
> @@ -816,13 +816,15 @@ static enum drm_connector_status qxl_con
> drm_connector_to_qxl_output(connector);
> struct drm_device *ddev = connector->dev;
> struct qxl_device *qdev = ddev->dev_private;
> - int connected;
> + bool connected = false;
>
> /* The first monitor is always connected */
> - connected = (output->index == 0) ||
> - (qdev->client_monitors_config &&
> - qdev->client_monitors_config->count > output->index &&
> - qxl_head_enabled(&qdev->client_monitors_config->heads[output->index]));
> + if (!qdev->client_monitors_config) {
> + if (output->index == 0)
> + connected = true;
> + } else
> + connected = qdev->client_monitors_config->count > output->index &&
> + qxl_head_enabled(&qdev->client_monitors_config->heads[output->index]);
>
> DRM_DEBUG("#%d connected: %d\n", output->index, connected);
> if (!connected)



--
js
suse labs