Commit 16620544 authored by Gerd Hoffmann's avatar Gerd Hoffmann

drm/qxl: track primary bo

Track which bo is used as primary surface.  With that in place we don't
need the primary_created flag any more, we can just check the primary bo
pointer instead.

Also verify we don't already have a primary surface in
qxl_io_create_primary().
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Acked-by: default avatarNoralf Trønnes <noralf@tronnes.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20190118122020.27596-13-kraxel@redhat.com
parent fb7ebc01
...@@ -374,13 +374,16 @@ void qxl_io_flush_surfaces(struct qxl_device *qdev) ...@@ -374,13 +374,16 @@ void qxl_io_flush_surfaces(struct qxl_device *qdev)
void qxl_io_destroy_primary(struct qxl_device *qdev) void qxl_io_destroy_primary(struct qxl_device *qdev)
{ {
wait_for_io_cmd(qdev, 0, QXL_IO_DESTROY_PRIMARY_ASYNC); wait_for_io_cmd(qdev, 0, QXL_IO_DESTROY_PRIMARY_ASYNC);
qdev->primary_created = false; qdev->primary_bo = NULL;
} }
void qxl_io_create_primary(struct qxl_device *qdev, struct qxl_bo *bo) void qxl_io_create_primary(struct qxl_device *qdev, struct qxl_bo *bo)
{ {
struct qxl_surface_create *create; struct qxl_surface_create *create;
if (WARN_ON(qdev->primary_bo))
return;
DRM_DEBUG_DRIVER("qdev %p, ram_header %p\n", qdev, qdev->ram_header); DRM_DEBUG_DRIVER("qdev %p, ram_header %p\n", qdev, qdev->ram_header);
create = &qdev->ram_header->create_surface; create = &qdev->ram_header->create_surface;
create->format = bo->surf.format; create->format = bo->surf.format;
...@@ -399,7 +402,7 @@ void qxl_io_create_primary(struct qxl_device *qdev, struct qxl_bo *bo) ...@@ -399,7 +402,7 @@ void qxl_io_create_primary(struct qxl_device *qdev, struct qxl_bo *bo)
create->type = QXL_SURF_TYPE_PRIMARY; create->type = QXL_SURF_TYPE_PRIMARY;
wait_for_io_cmd(qdev, 0, QXL_IO_CREATE_PRIMARY_ASYNC); wait_for_io_cmd(qdev, 0, QXL_IO_CREATE_PRIMARY_ASYNC);
qdev->primary_created = true; qdev->primary_bo = bo;
} }
void qxl_io_memslot_add(struct qxl_device *qdev, uint8_t id) void qxl_io_memslot_add(struct qxl_device *qdev, uint8_t id)
......
...@@ -302,7 +302,7 @@ static void qxl_crtc_update_monitors_config(struct drm_crtc *crtc, ...@@ -302,7 +302,7 @@ static void qxl_crtc_update_monitors_config(struct drm_crtc *crtc,
struct qxl_head head; struct qxl_head head;
int oldcount, i = qcrtc->index; int oldcount, i = qcrtc->index;
if (!qdev->primary_created) { if (!qdev->primary_bo) {
DRM_DEBUG_KMS("no primary surface, skip (%s)\n", reason); DRM_DEBUG_KMS("no primary surface, skip (%s)\n", reason);
return; return;
} }
......
...@@ -229,7 +229,7 @@ struct qxl_device { ...@@ -229,7 +229,7 @@ struct qxl_device {
struct qxl_ram_header *ram_header; struct qxl_ram_header *ram_header;
unsigned int primary_created:1; struct qxl_bo *primary_bo;
struct qxl_memslot main_slot; struct qxl_memslot main_slot;
struct qxl_memslot surfaces_slot; struct qxl_memslot surfaces_slot;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment