On Fri, Jun 23, 2023 at 8:27 AM Vivek Kasireddy <vivek.kasire...@intel.com> 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 <kra...@redhat.com> > Cc: Marc-André Lureau <marcandre.lur...@redhat.com> > Cc: Dongwon Kim <dongwon....@intel.com> > Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com> > Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > 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