Hi Marc-André,

I reviewed and realized these conditions won't be met in normal situations in 
given upstream code. But we've initially added those conditions in our internal 
code base for dev because we often had to call gd_hw_gl_flushed to forcefully 
unblock from HPD code (i.e. 'connectors' param. Not Upstreamed yet) when VM 
display is disconnected. In such cases, it is needed to make sure there is a 
frame in the pipeline already. Anyway, I think we can check dmabuf==NULL and 
fence_fd < 0 before calling gd_hw_flushed in HPD code just as in 
gd_change_runstate ([PATCH 1/3] ui/gtk: flush display pipeline before saving 
vmstate when blob=true). 

> Subject: Re: [PATCH 2/3] ui/gtk: unblock pipeline only if fence hasn't been
> signaled yet
> 
> Hi
> 
> On Thu, Dec 14, 2023 at 8:26 AM Dongwon Kim <dongwon....@intel.com>
> wrote:
> >
> > It is needed to unblock the pipeline only if there is an active dmabuf
> > to be rendered and the fence for it is not yet signaled.
> >
> > Cc: Marc-André Lureau <marcandre.lur...@redhat.com>
> > Cc: Vivek Kasireddy <vivek.kasire...@intel.com>
> > Signed-off-by: Dongwon Kim <dongwon....@intel.com>
> > ---
> >  ui/gtk.c | 14 ++++++++++----
> >  1 file changed, 10 insertions(+), 4 deletions(-)
> >
> > diff --git a/ui/gtk.c b/ui/gtk.c
> > index ea8d07833e..073c9eadb8 100644
> > --- a/ui/gtk.c
> > +++ b/ui/gtk.c
> > @@ -597,10 +597,16 @@ void gd_hw_gl_flushed(void *vcon)
> >      VirtualConsole *vc = vcon;
> >      QemuDmaBuf *dmabuf = vc->gfx.guest_fb.dmabuf;
> >
> > -    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);
> > +    if (!dmabuf) {
> > +        return;
> > +    }
> 
> When is this function called with dmabuf == NULL or fence_fd < 0?
> 
> > +
> > +    if (dmabuf->fence_fd > 0) {
> 
> this should be >= 0
> 
> > +        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);
> > +    }
> >  }
> >
> >  /** DisplayState Callbacks (opengl version) **/
> > --
> > 2.34.1
> >
> >
> 
> 
> --
> Marc-André Lureau

Reply via email to