mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-25 23:25:24 +00:00
qemu: Add support for "none" USB controller
This patch enables the "none" USB controller for qemu guests and adds valdiation on hot-plugged devices if the guest has USB disabled. This patch also adds a set of tests to check parsing of domain XMLs that use the "none" controller and some forbidden situations concerning it.
This commit is contained in:
parent
317badb213
commit
fbe871263c
@ -4787,6 +4787,13 @@ qemuBuildCommandLine(virConnectPtr conn,
|
|||||||
cont->type == VIR_DOMAIN_CONTROLLER_TYPE_FDC)
|
cont->type == VIR_DOMAIN_CONTROLLER_TYPE_FDC)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* Also, skip USB controllers with type none.*/
|
||||||
|
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_USB &&
|
||||||
|
cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) {
|
||||||
|
usbcontroller = -1; /* mark we don't want a controller */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Only recent QEMU implements a SATA (AHCI) controller */
|
/* Only recent QEMU implements a SATA (AHCI) controller */
|
||||||
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_SATA) {
|
if (cont->type == VIR_DOMAIN_CONTROLLER_TYPE_SATA) {
|
||||||
if (!qemuCapsGet(qemuCaps, QEMU_CAPS_ICH9_AHCI)) {
|
if (!qemuCapsGet(qemuCaps, QEMU_CAPS_ICH9_AHCI)) {
|
||||||
|
@ -5833,6 +5833,9 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
|
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
|
||||||
|
if (virDomainDefCompatibleDevice(vmdef, dev) < 0)
|
||||||
|
goto endjob;
|
||||||
|
|
||||||
/* Make a copy for updated domain. */
|
/* Make a copy for updated domain. */
|
||||||
vmdef = virDomainObjCopyPersistentDef(driver->caps, vm);
|
vmdef = virDomainObjCopyPersistentDef(driver->caps, vm);
|
||||||
if (!vmdef)
|
if (!vmdef)
|
||||||
@ -5858,6 +5861,9 @@ qemuDomainModifyDeviceFlags(virDomainPtr dom, const char *xml,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
|
if (flags & VIR_DOMAIN_AFFECT_LIVE) {
|
||||||
|
if (virDomainDefCompatibleDevice(vm->def, dev_copy) < 0)
|
||||||
|
goto endjob;
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case QEMU_DEVICE_ATTACH:
|
case QEMU_DEVICE_ATTACH:
|
||||||
ret = qemuDomainAttachDeviceLive(vm, dev_copy, dom);
|
ret = qemuDomainAttachDeviceLive(vm, dev_copy, dom);
|
||||||
|
19
tests/qemuxml2argvdata/qemuxml2argv-usb-none-hub.xml
Normal file
19
tests/qemuxml2argvdata/qemuxml2argv-usb-none-hub.xml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219136</memory>
|
||||||
|
<currentMemory unit='KiB'>219136</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<controller type='usb' model='none' index='0'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
<hub type='usb'>
|
||||||
|
<address type='usb' bus='0' port='1'/>
|
||||||
|
</hub>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
19
tests/qemuxml2argvdata/qemuxml2argv-usb-none-other.xml
Normal file
19
tests/qemuxml2argvdata/qemuxml2argv-usb-none-other.xml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219136</memory>
|
||||||
|
<currentMemory unit='KiB'>219136</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<controller type='usb' index='0' model='none'/>
|
||||||
|
<controller type='usb' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
|
||||||
|
</controller>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
21
tests/qemuxml2argvdata/qemuxml2argv-usb-none-usbtablet.xml
Normal file
21
tests/qemuxml2argvdata/qemuxml2argv-usb-none-usbtablet.xml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219136</memory>
|
||||||
|
<currentMemory unit='KiB'>219136</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<controller type='usb' model='none' index='0'/>
|
||||||
|
<input type='tablet' bus='usb'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
5
tests/qemuxml2argvdata/qemuxml2argv-usb-none.args
Normal file
5
tests/qemuxml2argvdata/qemuxml2argv-usb-none.args
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S \
|
||||||
|
-M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \
|
||||||
|
-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \
|
||||||
|
-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
|
||||||
|
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
|
16
tests/qemuxml2argvdata/qemuxml2argv-usb-none.xml
Normal file
16
tests/qemuxml2argvdata/qemuxml2argv-usb-none.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219136</memory>
|
||||||
|
<currentMemory unit='KiB'>219136</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<controller type='usb' index='0' model='none'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -683,6 +683,16 @@ mymain(void)
|
|||||||
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||||
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
|
QEMU_CAPS_PCI_MULTIFUNCTION, QEMU_CAPS_PIIX3_USB_UHCI,
|
||||||
QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
|
QEMU_CAPS_USB_HUB, QEMU_CAPS_ICH9_USB_EHCI1);
|
||||||
|
DO_TEST("usb-none",
|
||||||
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||||
|
DO_TEST_PARSE_ERROR("usb-none-other",
|
||||||
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||||
|
DO_TEST_PARSE_ERROR("usb-none-hub",
|
||||||
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||||
|
QEMU_CAPS_USB_HUB);
|
||||||
|
DO_TEST_PARSE_ERROR("usb-none-usbtablet",
|
||||||
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||||
|
|
||||||
|
|
||||||
DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
|
DO_TEST("smbios", QEMU_CAPS_SMBIOS_TYPE);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user