On Sat, Jul 25, 2026 at 11:13 AM Akihiko Odaki
<[email protected]> wrote:
>
> 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]>

> ---
>  hw/display/virtio-gpu.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index 718ba3039290..6413df029b8e 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;
> @@ -1279,7 +1279,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);
> @@ -1430,7 +1430,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);
>
> ---
> base-commit: 006a22cb26998998385b104db1ff9466ef2f3153
> change-id: 20260725-image-6c8566fb1253
>
> Best regards,
> --
> Akihiko Odaki <[email protected]>
>
>


-- 
Marc-André Lureau

Reply via email to