Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
libvirt.4037
f5359e55-libxl-autocreate-usb-controller.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File f5359e55-libxl-autocreate-usb-controller.patch of Package libvirt.4037
From f5359e55ec3bceb0e156445305881d5274fc58dc Mon Sep 17 00:00:00 2001 From: Chunyan Liu <cyliu@suse.com> Date: Wed, 15 Jun 2016 14:00:11 +0800 Subject: [PATCH 4/6] libxl: check available controller and port when hotplugging USB device 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@suse.com> --- src/libxl/libxl_driver.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) Index: libvirt-2.0.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-2.0.0.orig/src/libxl/libxl_driver.c +++ libvirt-2.0.0/src/libxl/libxl_driver.c @@ -3068,6 +3068,8 @@ libxlDomainAttachHostUSBDevice(libxlDriv 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(libxlDriv 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 one")); + virDomainControllerDefFree(controller); + goto cleanup; + } + } + if (VIR_REALLOC_N(vm->def->hostdevs, vm->def->nhostdevs + 1) < 0) goto cleanup;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor