On Fri, Jun 23, 2023 at 8:27 AM Vivek Kasireddy <[email protected]>
wrote:
> In the case where the console does not have gl capability, and
> if blob is set to true, make sure that the display updates still
> work. Commit e86a93f55463 accidentally broke this by misplacing
> the return statement (in resource_flush) causing the updates to
> be silently ignored.
>
> Fixes: e86a93f55463 ("virtio-gpu: splitting one extended mode guest fb
> into n-scanouts")
> Cc: Gerd Hoffmann <[email protected]>
> Cc: Marc-André Lureau <[email protected]>
> Cc: Dongwon Kim <[email protected]>
> Signed-off-by: Vivek Kasireddy <[email protected]>
>
Reviewed-by: Marc-André Lureau <[email protected]>
> ---
> hw/display/virtio-gpu.c | 27 ++++++++++++++++++++++-----
> 1 file changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index 66cddd94d9..97cd987cf3 100644
> --- a/hw/display/virtio-gpu.c
> +++ b/hw/display/virtio-gpu.c
> @@ -498,6 +498,8 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
> struct virtio_gpu_resource_flush rf;
> struct virtio_gpu_scanout *scanout;
> pixman_region16_t flush_region;
> + bool within_bounds = false;
> + bool update_submitted = false;
> int i;
>
> VIRTIO_GPU_FILL_CMD(rf);
> @@ -518,13 +520,28 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
> rf.r.x < scanout->x + scanout->width &&
> rf.r.x + rf.r.width >= scanout->x &&
> rf.r.y < scanout->y + scanout->height &&
> - rf.r.y + rf.r.height >= scanout->y &&
> - console_has_gl(scanout->con)) {
> - dpy_gl_update(scanout->con, 0, 0, scanout->width,
> - scanout->height);
> + rf.r.y + rf.r.height >= scanout->y) {
> + within_bounds = true;
> +
> + if (console_has_gl(scanout->con)) {
> + dpy_gl_update(scanout->con, 0, 0, scanout->width,
> + scanout->height);
> + update_submitted = true;
> + }
> }
> }
> - return;
> +
> + if (update_submitted) {
> + return;
> + }
> + if (!within_bounds) {
> + qemu_log_mask(LOG_GUEST_ERROR, "%s: flush bounds outside
> scanouts"
> + " bounds for flush %d: %d %d %d %d\n",
> + __func__, rf.resource_id, rf.r.x, rf.r.y,
> + rf.r.width, rf.r.height);
> + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_PARAMETER;
> + return;
> + }
> }
>
> if (!res->blob &&
> --
> 2.39.2
>
>
>
--
Marc-André Lureau