[libvirt] [PATCH V2 4/7] libxl: check available controller and port when hotplugging USB device
Cedric Bosdonnat
cbosdonnat at suse.com
Tue Aug 2 12:09:32 UTC 2016
On Wed, 2016-06-15 at 14:00 +0800, Chunyan Liu wrote:
> When hotplug a USB device, check if there is available controller
typos:
When hotplugging a USB device, check if there is an available controller
> and port, if not, automatically create a USB controller of version
> 2.0 and 8 ports.
>
> Signed-off-by: Chunyan Liu <cyliu at suse.com>
> ---
> src/libxl/libxl_driver.c | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
> index f614769..d9d7e3c 100644
> --- a/src/libxl/libxl_driver.c
> +++ b/src/libxl/libxl_driver.c
> @@ -3068,6 +3068,8 @@ libxlDomainAttachHostUSBDevice(libxlDriverPrivatePtr driver,
> libxl_device_usbdev usbdev;
> virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
> int ret = -1;
> + size_t i;
> + int ports = 0, usbdevs = 0;
>
> libxl_device_usbdev_init(&usbdev);
>
> @@ -3075,6 +3077,36 @@ libxlDomainAttachHostUSBDevice(libxlDriverPrivatePtr driver,
> hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
> goto cleanup;
>
> + /* search for available controller:port */
> + for (i = 0; i < vm->def->ncontrollers; i++)
> + ports += vm->def->controllers[i]->opts.usbopts.ports;
> +
> + for (i = 0; i < vm->def->nhostdevs; i++) {
> + if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
> + hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
> + usbdevs++;
> + }
> +
> + if (ports <= usbdevs) {
> + /* no free ports, we will create a new usb controller */
> + virDomainControllerDefPtr controller;
> +
> + if (!(controller = virDomainControllerDefNew(VIR_DOMAIN_CONTROLLER_TYPE_USB)))
> + goto cleanup;
> +
> + controller->model = VIR_DOMAIN_CONTROLLER_MODEL_USB_QUSB2;
> + controller->idx = -1;
> + controller->opts.usbopts.ports = 8;
> +
> + if (libxlDomainAttachControllerDevice(driver, vm, controller) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("No available USB controller and port, and "
> + "failed to attach a new USB controller"));
Rewording: "and failed to attach a new one"
> + virDomainControllerDefFree(controller);
> + goto cleanup;
> + }
> + }
> +
> if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1) < 0)
> goto cleanup;
>
ACK and pushed with the wording changes.
--
Cedric
More information about the libvir-list
mailing list