Commit 1ae3a14f92 for qemu.org
commit 1ae3a14f92647390ab7a4bd4c46ac5bf853c3045
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date: Fri Aug 21 12:43:48 2026 +0400
contrib/vhost-user-gpu: drop scanout_bitmask bookkeeping
The per-resource scanout_bitmask is a reverse index of which
scanouts reference a given resource. The information is already
available from scanout->resource_id. Performance impact should be
negligible.
Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
diff --git a/contrib/vhost-user-gpu/vhost-user-gpu.c b/contrib/vhost-user-gpu/vhost-user-gpu.c
index 933bdbb671..f70b34c179 100644
--- a/contrib/vhost-user-gpu/vhost-user-gpu.c
+++ b/contrib/vhost-user-gpu/vhost-user-gpu.c
@@ -36,7 +36,6 @@ struct virtio_gpu_simple_resource {
uint32_t format;
struct iovec *iov;
unsigned int iov_cnt;
- uint32_t scanout_bitmask;
pixman_image_t *image;
struct vugbm_buffer buffer;
QTAILQ_ENTRY(virtio_gpu_simple_resource) next;
@@ -416,17 +415,12 @@ static void
vg_disable_scanout(VuGpu *g, int scanout_id)
{
struct virtio_gpu_scanout *scanout = &g->scanout[scanout_id];
- struct virtio_gpu_simple_resource *res;
if (scanout->resource_id == 0) {
return;
}
- res = virtio_gpu_find_resource(g, scanout->resource_id);
- if (res) {
- res->scanout_bitmask &= ~(1 << scanout_id);
- }
-
+ scanout->resource_id = 0;
scanout->width = 0;
scanout->height = 0;
@@ -446,11 +440,9 @@ vg_resource_destroy(VuGpu *g,
{
int i;
- if (res->scanout_bitmask) {
- for (i = 0; i < VIRTIO_GPU_MAX_SCANOUTS; i++) {
- if (res->scanout_bitmask & (1 << i)) {
- vg_disable_scanout(g, i);
- }
+ for (i = 0; i < VIRTIO_GPU_MAX_SCANOUTS; i++) {
+ if (g->scanout[i].resource_id == res->resource_id) {
+ vg_disable_scanout(g, i);
}
}
@@ -662,7 +654,7 @@ static void
vg_set_scanout(VuGpu *g,
struct virtio_gpu_ctrl_command *cmd)
{
- struct virtio_gpu_simple_resource *res, *ores;
+ struct virtio_gpu_simple_resource *res;
struct virtio_gpu_scanout *scanout;
struct virtio_gpu_set_scanout ss;
int fd;
@@ -707,12 +699,6 @@ vg_set_scanout(VuGpu *g,
scanout = &g->scanout[ss.scanout_id];
- ores = virtio_gpu_find_resource(g, scanout->resource_id);
- if (ores) {
- ores->scanout_bitmask &= ~(1 << ss.scanout_id);
- }
-
- res->scanout_bitmask |= (1 << ss.scanout_id);
scanout->resource_id = ss.resource_id;
scanout->x = ss.r.x;
scanout->y = ss.r.y;
@@ -797,10 +783,10 @@ vg_resource_flush(VuGpu *g,
pixman_region16_t region, finalregion;
pixman_box16_t *extents;
- if (!(res->scanout_bitmask & (1 << i))) {
+ scanout = &g->scanout[i];
+ if (scanout->resource_id != res->resource_id) {
continue;
}
- scanout = &g->scanout[i];
pixman_region_init(&finalregion);
pixman_region_init_rect(®ion, scanout->x, scanout->y,