From: Akihiko Odaki <[email protected]>
Discriminating blobs by checking whether blob_size is nonzero fails for
empty blobs. Identify 2D resources by their non-NULL image instead.
Fixes: bdd53f739273 ("virtio-gpu: Update cursor data using blob")
Fixes: f66767f75c9c ("virtio-gpu: add virtio-gpu/blob vmstate subsection")
Signed-off-by: Akihiko Odaki <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
Message-ID: <[email protected]>
(cherry picked from commit 0fa3e1823b9b9ae1fc1ea0d290849578907a770b)
Signed-off-by: Michael Tokarev <[email protected]>
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 67ccc81e50c..598ee4026c1 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -56,18 +56,18 @@ void virtio_gpu_update_cursor_data(VirtIOGPU *g,
return;
}
- if (res->blob_size) {
- if (res->blob_size < (s->current_cursor->width *
- s->current_cursor->height * 4)) {
- return;
- }
- data = res->blob;
- } else {
+ if (res->image) {
if (pixman_image_get_width(res->image) != s->current_cursor->width ||
pixman_image_get_height(res->image) != s->current_cursor->height) {
return;
}
data = pixman_image_get_data(res->image);
+ } else {
+ if (res->blob_size < (s->current_cursor->width *
+ s->current_cursor->height * 4)) {
+ return;
+ }
+ data = res->blob;
}
pixels = s->current_cursor->width * s->current_cursor->height;
@@ -1281,7 +1281,7 @@ static int virtio_gpu_save(QEMUFile *f, void *opaque,
size_t size,
assert(QTAILQ_EMPTY(&g->cmdq));
QTAILQ_FOREACH(res, &g->reslist, next) {
- if (res->blob_size) {
+ if (!res->image) {
continue;
}
qemu_put_be32(f, res->resource_id);
@@ -1422,7 +1422,7 @@ static int virtio_gpu_blob_save(QEMUFile *f, void
*opaque, size_t size,
assert(QTAILQ_EMPTY(&g->cmdq));
QTAILQ_FOREACH(res, &g->reslist, next) {
- if (!res->blob_size) {
+ if (res->image) {
continue;
}
assert(!res->image);
--
2.47.3