[Spice-devel] [spice-server 1/2] cursor: Delay release of QXL guest cursor resources

Frediano Ziglio fziglio at redhat.com
Thu Apr 12 11:03:34 UTC 2018


> 
> On Thu, Apr 12, 2018 at 05:50:12AM -0400, Frediano Ziglio wrote:
> > > 
> > > On Wed, Apr 11, 2018 at 01:24:59PM -0400, Frediano Ziglio wrote:
> > > > > 
> > > > > There's an implicit API/ABI contract between QEMU and SPICE that
> > > > > SPICE
> > > > > will keep the guest QXL resources alive as long as QEMU can hold a
> > > > > pointer to them. This implicit contract was broken in 1c6e7cf7
> > > > > "Release
> > > > > cursor as soon as possible", causing crashes at migration time.
> > > > > While the proper fix would be in QEMU so that spice-server does not
> > > > > need
> > > > > to have that kind of knowledge regarding QEMU internal
> > > > > implementation,
> > > > > this commit reverts to the pre-1c6e7cf7 behaviour to avoid a
> > > > > regression
> > > > > while QEMU is being fixed.
> > > > > 
> > > > > This version of the fix is based on a suggestion from Frediano
> > > > > Ziglio.
> > > > > 
> > > > > https://bugzilla.redhat.com/show_bug.cgi?id=1540919
> > > > > 
> > > > > Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
> > > > > ---
> > > > >  server/red-parse-qxl.c | 3 +++
> > > > >  server/red-parse-qxl.h | 1 +
> > > > >  server/red-worker.c    | 2 +-
> > > > >  3 files changed, 5 insertions(+), 1 deletion(-)
> > > > > 
> > > > > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c
> > > > > index d0e7eb718..ebd7dcee7 100644
> > > > > --- a/server/red-parse-qxl.c
> > > > > +++ b/server/red-parse-qxl.c
> > > > > @@ -1497,4 +1497,7 @@ void red_put_cursor_cmd(RedCursorCmd *red)
> > > > >          red_put_cursor(&red->u.set.shape);
> > > > >          break;
> > > > >      }
> > > > > +    if (red->qxl) {
> > > > > +        red_qxl_release_resource(red->qxl, red->release_info_ext);
> > > > > +    }
> > > > >  }
> > > > 
> > > > Yes, fix of my code is correct.
> > > > However I cannot compile without the include!
> > > > Why is compiling for you? Maybe you have another commit in?
> > > 
> > > Yep, my bad, I did not test it independantly of other commits, I
> > > squashed the missing #include <red-qxl.h> in this commit.
> > > 
> > > Christophe
> > > 
> > 
> > Should not be #include "red-qxl.h" ?
> 
> Yes, that, which is what I had squashed in ;)
> 
> diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c
> index d0e7eb718..9f1303da3 100644
> --- a/server/red-parse-qxl.c
> +++ b/server/red-parse-qxl.c
> @@ -24,6 +24,7 @@
>  #include <common/lz_common.h>
>  #include "spice-bitmap-utils.h"
>  #include "red-common.h"
> +#include "red-qxl.h"
>  #include "memslot.h"
>  #include "red-parse-qxl.h"
> 
> 

With that change:

Acked-by: Frediano Ziglio <fziglio at redhat.com>

Frediano


More information about the Spice-devel mailing list