qxl: fix primary surface handling
authorGerd Hoffmann <kraxel@redhat.com>
Mon, 11 Sep 2017 09:39:50 +0000 (11:39 +0200)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 12 Sep 2017 06:04:09 +0000 (08:04 +0200)
commitb0e07da3f5c8d069d186a7983ff64eaebf2ea230
tree87841dc58f3c592fa29d79e11f97c12c1839c5d3
parent79964dbaf662229253b281c42e82e2675a9d3b80
qxl: fix primary surface handling

The atomic conversion of the qxl driver didn't got the primary surface
handling completely right.  It works in the common simple cases, but
fails for example when changing the display resolution using xrandr or
in multihead setups.

The rules are simple:  There is one primary surface.  Before defining a
new one you have to destroy the old one.

This patch makes qxl_primary_atomic_update() destroy the primary surface
before defining a new one.  It fixes is_primary flag updates.  It adds
is_primary checks so we don't try to update the primary surface in case
it already has the state we want it being in.

Fixes: 3538e80a869b ("drm: qxl: Atomic phase 1: Implement mode_set_nofb")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102338
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=196777
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Gabriel Krisman Bertazi <krisman@collabora.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/20170911093950.22401-1-kraxel@redhat.com
drivers/gpu/drm/qxl/qxl_display.c