[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 07/11] libxl_dm: Pre-open QMP socket for QEMU
Thanks for this patch. I have a feeling that I have already commented (perhaps informally) on a few aspects of it but the message was not marked `replied' in my MUA so I thought I would formally review it. Apologies if my comments are, effectively, duplicates. Anthony PERARD writes ("[PATCH v6 07/11] libxl_dm: Pre-open QMP socket for QEMU"): > This patch move the creation of the QMP unix socket from QEMU to libxl. moves > But libxl doesn't rely on this yet. > > When starting QEMU with dm_restrict=1, pre-open the QMP socket before > exec QEMU. That socket will be usefull to findout if QEMU is ready, and useful find out > pre-opening it means that libxl can connect to it without waiting for > QEMU to create it. > > The pre-openning is conditionnal, based on the use of dm_restrict pre-opening conditional > because it is using a new command line option of QEMU, and dm_restrict > support in QEMU is newer. > @@ -539,6 +539,9 @@ int libxl__domain_make(libxl__gc *gc, libxl_domain_config > *d_config, > libxl_domain_create_info *info = &d_config->c_info; > libxl_domain_build_info *b_info = &d_config->b_info; > > + /* Attempt to initialise libxl__domain_build_state */ > + state->dm_monitor_fd = -1; See my comments below. > +static int libxl__pre_open_qmp_socket(libxl__gc *gc, libxl_domid domid, > + int *fd_r) > +{ > + int rc, r; > + int fd; > + struct sockaddr_un un; > + const char *path = libxl__qemu_qmp_path(gc, domid); > + > + assert(fd_r != NULL); This assertion is not really of any use since otherwise we'll dereference it, and crash, in due course, anyway. > + r = listen(fd, 1); What is the reasoning behind the choice of 1 for the listen queue parameter ? > static int libxl__build_device_model_args_new(libxl__gc *gc, > const char *dm, int guest_domid, > const libxl_domain_config > *guest_config, > @@ -944,10 +991,16 @@ static int libxl__build_device_model_args_new(libxl__gc > *gc, > GCSPRINTF("%d", guest_domid), NULL); > > flexarray_append(dm_args, "-chardev"); > - flexarray_append(dm_args, > - GCSPRINTF("socket,id=libxl-cmd," > - "path=%s,server,nowait", > - libxl__qemu_qmp_path(gc, guest_domid))); > + if (state->dm_monitor_fd >= 0) { > + flexarray_append(dm_args, > + GCSPRINTF("socket,id=libxl-cmd,fd=%d,server,nowait", > + state->dm_monitor_fd)); I think I suggested (IRL perhaps, and perhaps after you posted this) that you might add some asserts to the other ..._build_device_model_args_... functions. > @@ -2000,6 +2053,7 @@ void libxl__spawn_stub_dm(libxl__egc *egc, > libxl__stub_dm_spawn_state *sdss) > if (ret) > goto out; > > + d_state->dm_monitor_fd = -1; This function calls libxl__domain_make which you have just changed to also set this. The situation is now very confusing, I think. I think it would probably be better to introduce a new function to initialise a libxl__domain_build_state, which is called every time one comes into existence. Probably as a separate patch. > @@ -2408,6 +2470,7 @@ out_close: > if (logfile_w >= 0) close(logfile_w); > out: > if (dm_state_fd >= 0) close(dm_state_fd); > + if (state->dm_monitor_fd >= 0) close(state->dm_monitor_fd); I think this cleanup of `state' needs to be split out. There should be a dispose function called everywhere a state ceases to exist. See above about _init. Thanks, Ian. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |