Skip to content

Commit

Permalink
drm/qxl: move qxl_primary_apply_cursor to correct place
Browse files Browse the repository at this point in the history
The qxl device ties the cursor to the primary surface.  Therefore
calling qxl_io_destroy_primary() and qxl_io_create_primary() to switch
the framebuffer causes the cursor information being lost and the driver
must re-apply it.

The correct call order to do that is qxl_io_destroy_primary() +
qxl_io_create_primary() + qxl_primary_apply_cursor().

The old code did qxl_io_destroy_primary() + qxl_primary_apply_cursor() +
qxl_io_create_primary().  Due to qxl_primary_apply_cursor request being
queued in a ringbuffer and qxl_io_create_primary() trapping to the
hypervisor instantly there is a high chance that qxl_io_create_primary()
is processed first even with the wrong call order.  But it's racy and
thus not reliable.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Noralf Trønnes <noralf@tronnes.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20190118122020.27596-11-kraxel@redhat.com
  • Loading branch information
Gerd Hoffmann committed Jan 28, 2019
1 parent f3bc22f commit 1f85535
Showing 1 changed file with 3 additions and 7 deletions.
10 changes: 3 additions & 7 deletions drivers/gpu/drm/qxl/qxl_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,6 @@ static void qxl_primary_atomic_update(struct drm_plane *plane,
.x2 = plane->state->fb->width,
.y2 = plane->state->fb->height
};
int ret;
bool same_shadow = false;

if (old_state->fb) {
Expand All @@ -554,16 +553,13 @@ static void qxl_primary_atomic_update(struct drm_plane *plane,
if (!same_shadow)
qxl_io_destroy_primary(qdev);
bo_old->is_primary = false;

ret = qxl_primary_apply_cursor(plane);
if (ret)
DRM_ERROR(
"could not set cursor after creating primary");
}

if (!bo->is_primary) {
if (!same_shadow)
if (!same_shadow) {
qxl_io_create_primary(qdev, 0, bo);
qxl_primary_apply_cursor(plane);
}
bo->is_primary = true;
}

Expand Down

0 comments on commit 1f85535

Please sign in to comment.