[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging-4.14] libxl: Re-scope qmp_proxy_spawn.ao usage



commit 3f48134e31993b4fde53b970014dc032619ffd93
Author:     Jason Andryuk <jandryuk@xxxxxxxxx>
AuthorDate: Thu Apr 7 09:11:08 2022 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Apr 7 09:11:08 2022 +0200

    libxl: Re-scope qmp_proxy_spawn.ao usage
    
    I've observed this failed assertion:
    libxl_event.c:2057: libxl__ao_inprogress_gc: Assertion `ao' failed.
    
    AFAICT, this is happening in qmp_proxy_spawn_outcome where
    sdss->qmp_proxy_spawn.ao is NULL.
    
    The out label of spawn_stub_launch_dm() calls qmp_proxy_spawn_outcome(),
    but it is only in the success path that sdss->qmp_proxy_spawn.ao gets
    set to the current ao.
    
    qmp_proxy_spawn_outcome() should instead use sdss->dm.spawn.ao, which is
    the already in-use ao when spawn_stub_launch_dm() is called.  The same
    is true for spawn_qmp_proxy().
    
    With this, move sdss->qmp_proxy_spawn.ao initialization to
    spawn_qmp_proxy() since its use is for libxl__spawn_spawn() and it can
    be initialized along with the rest of sdss->qmp_proxy_spawn.
    
    Fixes: 83c845033dc8 ("libxl: use vchan for QMP access with Linux 
stubdomain")
    Signed-off-by: Jason Andryuk <jandryuk@xxxxxxxxx>
    Reviewed-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
    master commit: d62a34423a1a98aefd7c30e22d2d82d198f077c8
    master date: 2022-04-01 17:01:57 +0100
---
 tools/libxl/libxl_dm.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index f2dc5696b9..0620e3908b 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -2538,7 +2538,6 @@ static void spawn_stub_launch_dm(libxl__egc *egc,
             goto out;
     }
 
-    sdss->qmp_proxy_spawn.ao = ao;
     if (libxl__stubdomain_is_linux(&guest_config->b_info)) {
         spawn_qmp_proxy(egc, sdss);
     } else {
@@ -2555,7 +2554,7 @@ out:
 static void spawn_qmp_proxy(libxl__egc *egc,
                             libxl__stub_dm_spawn_state *sdss)
 {
-    STATE_AO_GC(sdss->qmp_proxy_spawn.ao);
+    STATE_AO_GC(sdss->dm.spawn.ao);
     const uint32_t guest_domid = sdss->dm.guest_domid;
     const uint32_t dm_domid = sdss->pvqemu.guest_domid;
     const char *dom_path = libxl__xs_get_dompath(gc, dm_domid);
@@ -2569,6 +2568,7 @@ static void spawn_qmp_proxy(libxl__egc *egc,
         goto out;
     }
 
+    sdss->qmp_proxy_spawn.ao = ao;
     sdss->qmp_proxy_spawn.what = GCSPRINTF("domain %d device model qmp proxy", 
guest_domid);
     sdss->qmp_proxy_spawn.pidpath = GCSPRINTF("%s/image/qmp-proxy-pid", 
dom_path);
     sdss->qmp_proxy_spawn.xspath = DEVICE_MODEL_XS_PATH(gc, 
LIBXL_TOOLSTACK_DOMID,
@@ -2656,7 +2656,7 @@ static void qmp_proxy_spawn_outcome(libxl__egc *egc,
                                     libxl__stub_dm_spawn_state *sdss,
                                     int rc)
 {
-    STATE_AO_GC(sdss->qmp_proxy_spawn.ao);
+    STATE_AO_GC(sdss->dm.spawn.ao);
     /*
      * Until xenconsoled learns how to handle multiple consoles, require qemu
      * in dom0 to serve consoles for a stubdomain - it require at least 3 of 
them.
--
generated by git-patchbot for /home/xen/git/xen.git#staging-4.14



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.