[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 4/5] libxl: check for dynamic device model start required
>>> On 3/23/2016 at 08:24 PM, in message <1458735847-9448-5-git-send-email-jgross@xxxxxxxx>, Juergen Gross <jgross@xxxxxxxx> wrote: > Add a service routine checking whether a device model must be started > after adding a device to a domain. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> > --- > tools/libxl/libxl.c | 12 ++++++++++++ > tools/libxl/libxl_dm.c | 14 ++++++++++++++ > tools/libxl/libxl_internal.h | 4 ++++ > tools/libxl/libxl_pci.c | 3 +++ > tools/libxl/libxl_pvusb.c | 6 ++++++ > 5 files changed, 39 insertions(+) > > diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c > index dcd0951..2b4e36f 100644 > --- a/tools/libxl/libxl.c > +++ b/tools/libxl/libxl.c > @@ -2084,6 +2084,9 @@ void libxl__device_vtpm_add(libxl__egc *egc, uint32_t > domid, > if (rc) goto out; > > DEVICE_ADD(vtpm, vtpms, domid, &vtpm_saved, COMPARE_DEVID, > &d_config); > + > + rc = libxl__dm_check_start(gc, &d_config, domid); > + if (rc) goto out; > } Why is this check put inside the if (aodev->update_json) { }? I think it's a common check, so should move outside. - Chunyan > > for (;;) { > @@ -2388,6 +2391,9 @@ static void device_disk_add(libxl__egc *egc, uint32_t > domid, > if (rc) goto out; > > DEVICE_ADD(disk, disks, domid, &disk_saved, COMPARE_DISK, > &d_config); > + > + rc = libxl__dm_check_start(gc, &d_config, domid); > + if (rc) goto out; > } > > for (;;) { > @@ -2928,6 +2934,9 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, > libxl_device_disk *disk, > > DEVICE_ADD(disk, disks, domid, &disk_saved, COMPARE_DISK, &d_config); > > + rc = libxl__dm_check_start(gc, &d_config, domid); > + if (rc) goto out; > + > if (dm_ver == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) { > rc = libxl__qmp_insert_cdrom(gc, domid, disk); > if (rc) goto out; > @@ -3354,6 +3363,9 @@ void libxl__device_nic_add(libxl__egc *egc, uint32_t > domid, > if (rc) goto out; > > DEVICE_ADD(nic, nics, domid, &nic_saved, COMPARE_DEVID, &d_config); > + > + rc = libxl__dm_check_start(gc, &d_config, domid); > + if (rc) goto out; > } > > for (;;) { > diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c > index bffb8f8..78c46674 100644 > --- a/tools/libxl/libxl_dm.c > +++ b/tools/libxl/libxl_dm.c > @@ -2160,6 +2160,20 @@ int libxl__dm_active(libxl__gc *gc, uint32_t domid) > return pid != NULL; > } > > +int libxl__dm_check_start(libxl__gc *gc, libxl_domain_config *d_config, > + uint32_t domid) > +{ > + if (libxl__dm_active(gc, domid)) > + return 0; > + > + if (!libxl__need_xenpv_qemu(gc, d_config)) > + return 0; > + > + LOG(ERROR, "device model required but not running"); > + > + return ERROR_FAIL; > +} > + > /* > * Local variables: > * mode: C > diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h > index 2db8b1b..9708a46 100644 > --- a/tools/libxl/libxl_internal.h > +++ b/tools/libxl/libxl_internal.h > @@ -1618,6 +1618,10 @@ _hidden const char > *libxl__domain_device_model(libxl__gc *gc, > const libxl_domain_build_info > *info); > _hidden int libxl__need_xenpv_qemu(libxl__gc *gc, > libxl_domain_config *d_config); > +_hidden int libxl__dm_active(libxl__gc *gc, uint32_t domid); > +_hidden int libxl__dm_check_start(libxl__gc *gc, > + libxl_domain_config *d_config, > + uint32_t domid); > > /* > * This function will fix reserved device memory conflict > diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c > index dc10cb7..300fd4d 100644 > --- a/tools/libxl/libxl_pci.c > +++ b/tools/libxl/libxl_pci.c > @@ -169,6 +169,9 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, > uint32_t domid, libxl_d > > DEVICE_ADD(pci, pcidevs, domid, &pcidev_saved, COMPARE_PCI, &d_config); > > + rc = libxl__dm_check_start(gc, &d_config, domid); > + if (rc) goto out; > + > for (;;) { > rc = libxl__xs_transaction_start(gc, &t); > if (rc) goto out; > diff --git a/tools/libxl/libxl_pvusb.c b/tools/libxl/libxl_pvusb.c > index 7200ead..976e4c7 100644 > --- a/tools/libxl/libxl_pvusb.c > +++ b/tools/libxl/libxl_pvusb.c > @@ -139,6 +139,9 @@ static int libxl__device_usbctrl_add_xenstore(libxl__gc > *gc, uint32_t domid, > > DEVICE_ADD(usbctrl, usbctrls, domid, &usbctrl_saved, > COMPARE_USBCTRL, &d_config); > + > + rc = libxl__dm_check_start(gc, &d_config, domid); > + if (rc) goto out; > } > > for (;;) { > @@ -955,6 +958,9 @@ static int libxl__device_usbdev_add_xenstore(libxl__gc > *gc, uint32_t domid, > > DEVICE_ADD(usbdev, usbdevs, domid, &usbdev_saved, > COMPARE_USB, &d_config); > + > + rc = libxl__dm_check_start(gc, &d_config, domid); > + if (rc) goto out; > } > > for (;;) { _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |