diff mbox series

ui/gtk: graphic_hw_gl_flushed after closing dmabuf->fence_fd

Message ID 20211121172237.14937-1-dongwon.kim@intel.com (mailing list archive)
State New, archived
Headers show
Series ui/gtk: graphic_hw_gl_flushed after closing dmabuf->fence_fd | expand

Commit Message

Kim, Dongwon Nov. 21, 2021, 5:22 p.m. UTC
The dmabuf often becomes invalid right after unblocking pipeline
and graphic_hw_gl_flushed in case a new scanout blob is submitted
because the dmabuf associated with the current guest scanout is
freed after swapping.

So both graphic_hw_gl_block and graphic_hw_gl_flushed should be
executed after closing fence_fd for the current dmabuf.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
---
 ui/gtk.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Philippe Mathieu-Daudé Nov. 22, 2021, 12:10 p.m. UTC | #1
On 11/21/21 18:22, Dongwon Kim wrote:
> The dmabuf often becomes invalid right after unblocking pipeline
> and graphic_hw_gl_flushed in case a new scanout blob is submitted
> because the dmabuf associated with the current guest scanout is
> freed after swapping.
> 
> So both graphic_hw_gl_block and graphic_hw_gl_flushed should be
> executed after closing fence_fd for the current dmabuf.
> 
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Vivek Kasireddy <vivek.kasireddy@intel.com>

If so:
Fixes: 65b847d284c ("ui: Create sync objects and fences only for blobs")

> Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
> ---
>  ui/gtk.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/ui/gtk.c b/ui/gtk.c
> index 7abe1a69d8..2a3a9db13f 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -589,11 +589,11 @@ void gd_hw_gl_flushed(void *vcon)
>      VirtualConsole *vc = vcon;
>      QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
>  
> -    graphic_hw_gl_block(vc->gfx.dcl.con, false);
> -    graphic_hw_gl_flushed(vc->gfx.dcl.con);
>      qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL);
>      close(dmabuf->fence_fd);
>      dmabuf->fence_fd = -1;
> +    graphic_hw_gl_block(vc->gfx.dcl.con, false);
> +    graphic_hw_gl_flushed(vc->gfx.dcl.con);
>  }
>  
>  /** DisplayState Callbacks (opengl version) **/
>
diff mbox series

Patch

diff --git a/ui/gtk.c b/ui/gtk.c
index 7abe1a69d8..2a3a9db13f 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -589,11 +589,11 @@  void gd_hw_gl_flushed(void *vcon)
     VirtualConsole *vc = vcon;
     QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
 
-    graphic_hw_gl_block(vc->gfx.dcl.con, false);
-    graphic_hw_gl_flushed(vc->gfx.dcl.con);
     qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL);
     close(dmabuf->fence_fd);
     dmabuf->fence_fd = -1;
+    graphic_hw_gl_block(vc->gfx.dcl.con, false);
+    graphic_hw_gl_flushed(vc->gfx.dcl.con);
 }
 
 /** DisplayState Callbacks (opengl version) **/