[libvirt] [PATCHv2 0/2] Enable virtio-scsi and virtio-rng for s390

Early QEMU versions did not support virtio-scsi or virtio-rng for s390 machines. This series enables libvirt to exploit the capabilities provided by newer QEMUs. V2 Changes: - Dropped 1/3, the rename of virtio-scsi-pci capability, we will keep it for compatibility reasons. - Add a new generic virtio-scsi capability for non-pci busses Viktor Mihajlovski (2): S390: Enable virtio-scsi and virtio-rng S390: Testcases for virtio-scsi and virtio-rng src/qemu/qemu_capabilities.c | 7 ++++- src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 32 ++++++++++++++++---- .../qemuxml2argv-disk-virtio-scsi-ccw.args | 9 ++++++ .../qemuxml2argv-disk-virtio-scsi-ccw.xml | 31 +++++++++++++++++++ .../qemuxml2argv-virtio-rng-ccw.args | 12 ++++++++ .../qemuxml2argv-virtio-rng-ccw.xml | 30 ++++++++++++++++++ tests/qemuxml2argvtest.c | 7 +++++ 8 files changed, 122 insertions(+), 7 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.xml -- 1.7.9.5

Newer versions of QEMU support virtio-scsi and virtio-rng devices on the virtio-s390 and ccw busses. Since the virtio-capability is orthogonal to the implementing bus we add a generic virtio-scsi capability but do not touch the already existing virtio-scsi-pci capability for PCI based systems. Adding capability detection, address assignment and command line generation for virtio-scsi and virtio-rng. Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com> --- V2 Changes - Add virtio-scsi capability for non-PCI busses. - Check for both capabilities in qemuSetScsiControllerModel src/qemu/qemu_capabilities.c | 7 ++++++- src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 32 ++++++++++++++++++++++++++------ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 79cfdb3..fff5de9 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -210,7 +210,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, "rng-random", /* 130 */ "rng-egd", - "virtio-ccw" + "virtio-ccw", + "virtio-scsi" ); struct _virQEMUCaps { @@ -1323,6 +1324,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "sclpconsole", QEMU_CAPS_SCLP_S390 }, { "lsi53c895a", QEMU_CAPS_SCSI_LSI }, { "virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI_PCI }, + { "virtio-scsi-s390", QEMU_CAPS_VIRTIO_SCSI }, + { "virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI }, { "spicevmc", QEMU_CAPS_DEVICE_SPICEVMC }, { "qxl-vga", QEMU_CAPS_DEVICE_QXL_VGA }, { "qxl", QEMU_CAPS_DEVICE_QXL }, @@ -1336,6 +1339,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "usb-serial", QEMU_CAPS_DEVICE_USB_SERIAL}, { "usb-net", QEMU_CAPS_DEVICE_USB_NET}, { "virtio-rng-pci", QEMU_CAPS_DEVICE_VIRTIO_RNG }, + { "virtio-rng-s390", QEMU_CAPS_DEVICE_VIRTIO_RNG }, + { "virtio-rng-ccw", QEMU_CAPS_DEVICE_VIRTIO_RNG }, { "rng-random", QEMU_CAPS_OBJECT_RNG_RANDOM }, { "rng-egd", QEMU_CAPS_OBJECT_RNG_EGD }, }; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 5c5dc5a..1ed060e 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -172,6 +172,7 @@ enum virQEMUCapsFlags { virtio rng */ QEMU_CAPS_OBJECT_RNG_EGD = 131, /* EGD protocol daemon for rng */ QEMU_CAPS_VIRTIO_CCW = 132, /* -device virtio-*-ccw */ + QEMU_CAPS_VIRTIO_SCSI = 133, /* -device virtio-scsi-* (* != pci) */ QEMU_CAPS_LAST, /* this must always be the last item */ }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index e7f2325..8ee6fb4 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -505,7 +505,8 @@ qemuSetScsiControllerModel(virDomainDefPtr def, } break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI_PCI)) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI_PCI) && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_SCSI)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("This QEMU doesn't support " "virtio scsi controller")); @@ -899,7 +900,8 @@ qemuDomainPrimeS390VirtioDevices(virDomainDefPtr def, { /* declare address-less virtio devices to be of address type 'type' - only disks, networks, consoles, controllers and memballoon for now + disks, networks, consoles, controllers, memballoon and rng in this + order */ int i; @@ -922,8 +924,10 @@ qemuDomainPrimeS390VirtioDevices(virDomainDefPtr def, } for (i = 0; i < def->ncontrollers ; i++) { - if (def->controllers[i]->type == - VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL && + if ((def->controllers[i]->type == + VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL || + def->controllers[i]->type == + VIR_DOMAIN_CONTROLLER_TYPE_SCSI) && def->controllers[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) def->controllers[i]->info.type = type; @@ -933,6 +937,11 @@ qemuDomainPrimeS390VirtioDevices(virDomainDefPtr def, def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO && def->memballoon->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) def->memballoon->info.type = type; + + if (def->rng && + def->rng->model == VIR_DOMAIN_RNG_MODEL_VIRTIO && + def->rng->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) + def->rng->info.type = type; } static int @@ -3277,7 +3286,13 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, switch (model) { case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: - virBufferAddLit(&buf, "virtio-scsi-pci"); + if (def->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) + virBufferAddLit(&buf, "virtio-scsi-ccw"); + else if (def->info.type == + VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) + virBufferAddLit(&buf, "virtio-scsi-s390"); + else + virBufferAddLit(&buf, "virtio-scsi-pci"); break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC: virBufferAddLit(&buf, "lsi"); @@ -4490,7 +4505,12 @@ qemuBuildRNGDeviceArgs(virCommandPtr cmd, goto cleanup; } - virBufferAsprintf(&buf, "virtio-rng-pci,rng=%s", dev->info.alias); + if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) + virBufferAsprintf(&buf, "virtio-rng-ccw,rng=%s", dev->info.alias); + else if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_S390) + virBufferAsprintf(&buf, "virtio-rng-s390,rng=%s", dev->info.alias); + else + virBufferAsprintf(&buf, "virtio-rng-pci,rng=%s", dev->info.alias); if (qemuBuildDeviceAddressStr(&buf, &dev->info, qemuCaps) < 0) goto cleanup; -- 1.7.9.5

On Thu, Mar 14, 2013 at 06:12:31PM +0100, Viktor Mihajlovski wrote:
Newer versions of QEMU support virtio-scsi and virtio-rng devices on the virtio-s390 and ccw busses.
Since the virtio-capability is orthogonal to the implementing bus we add a generic virtio-scsi capability but do not touch the already existing virtio-scsi-pci capability for PCI based systems.
Adding capability detection, address assignment and command line generation for virtio-scsi and virtio-rng.
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com> --- V2 Changes - Add virtio-scsi capability for non-PCI busses. - Check for both capabilities in qemuSetScsiControllerModel
src/qemu/qemu_capabilities.c | 7 ++++++- src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 32 ++++++++++++++++++++++++++------ 3 files changed, 33 insertions(+), 7 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 79cfdb3..fff5de9 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -210,7 +210,8 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
"rng-random", /* 130 */ "rng-egd", - "virtio-ccw" + "virtio-ccw", + "virtio-scsi" );
struct _virQEMUCaps { @@ -1323,6 +1324,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "sclpconsole", QEMU_CAPS_SCLP_S390 }, { "lsi53c895a", QEMU_CAPS_SCSI_LSI }, { "virtio-scsi-pci", QEMU_CAPS_VIRTIO_SCSI_PCI }, + { "virtio-scsi-s390", QEMU_CAPS_VIRTIO_SCSI }, + { "virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI }, { "spicevmc", QEMU_CAPS_DEVICE_SPICEVMC }, { "qxl-vga", QEMU_CAPS_DEVICE_QXL_VGA }, { "qxl", QEMU_CAPS_DEVICE_QXL }, @@ -1336,6 +1339,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "usb-serial", QEMU_CAPS_DEVICE_USB_SERIAL}, { "usb-net", QEMU_CAPS_DEVICE_USB_NET}, { "virtio-rng-pci", QEMU_CAPS_DEVICE_VIRTIO_RNG }, + { "virtio-rng-s390", QEMU_CAPS_DEVICE_VIRTIO_RNG }, + { "virtio-rng-ccw", QEMU_CAPS_DEVICE_VIRTIO_RNG }, { "rng-random", QEMU_CAPS_OBJECT_RNG_RANDOM }, { "rng-egd", QEMU_CAPS_OBJECT_RNG_EGD }, }; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 5c5dc5a..1ed060e 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -172,6 +172,7 @@ enum virQEMUCapsFlags { virtio rng */ QEMU_CAPS_OBJECT_RNG_EGD = 131, /* EGD protocol daemon for rng */ QEMU_CAPS_VIRTIO_CCW = 132, /* -device virtio-*-ccw */ + QEMU_CAPS_VIRTIO_SCSI = 133, /* -device virtio-scsi-* (* != pci) */
Sorry, I think I should have been clearer before. I was only meaning to reject the rename of the string. Renaming the exist enum symbol is fine, as long as corresponding string is left unchanged. So no need for this new enum entry. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 03/14/2013 06:29 PM, Daniel P. Berrange wrote:
Sorry, I think I should have been clearer before. I was only meaning to reject the rename of the string. Renaming the exist enum symbol is fine, as long as corresponding string is left unchanged. So no need for this new enum entry.
Daniel
I understood that this was technically feasible, however found it strange to use "virtio-scsi-pci" in a, say CCW context. If you think that this is only a minor quirk we can go that way. Just let me know ... it's only a stroke of the pen :-). -- Mit freundlichen Grüßen/Kind Regards Viktor Mihajlovski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martina Köderitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

On 03/14/2013 11:52 AM, Viktor Mihajlovski wrote:
On 03/14/2013 06:29 PM, Daniel P. Berrange wrote:
Sorry, I think I should have been clearer before. I was only meaning to reject the rename of the string. Renaming the exist enum symbol is fine, as long as corresponding string is left unchanged. So no need for this new enum entry.
Daniel
I understood that this was technically feasible, however found it strange to use "virtio-scsi-pci" in a, say CCW context. If you think that this is only a minor quirk we can go that way. Just let me know ... it's only a stroke of the pen :-).
You can do s/QEMU_CAPS_VIRTIO_SCSI_PCI/QEMU_CAPS_VIRTIO_SCSI/ so that the bulk of the code looks sane. The only thing you can't do is rename s/"virtio-scsi-pci"/"virtio-scsi"/, because that has impacts to XML which is preserved over libvirtd restarts. But you CAN do: s|"virtio-scsi-pci";|& /* the -pci suffix is a back-compat historical wart */| and then you don't need a new cap bit. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

On 03/14/2013 06:56 PM, Eric Blake wrote:
s|"virtio-scsi-pci";|& /* the -pci suffix is a back-compat historical wart */|
don't tempt me use *that* wording ... but, yes I am convinced by now -- Mit freundlichen Grüßen/Kind Regards Viktor Mihajlovski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martina Köderitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

Adding test cases for virtio-scsi and virtio-rng. Since ccw is covering the superset of the s390 bus handling, these are deemed to be sufficient. Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com> --- .../qemuxml2argv-disk-virtio-scsi-ccw.args | 9 ++++++ .../qemuxml2argv-disk-virtio-scsi-ccw.xml | 31 ++++++++++++++++++++ .../qemuxml2argv-virtio-rng-ccw.args | 12 ++++++++ .../qemuxml2argv-virtio-rng-ccw.xml | 30 +++++++++++++++++++ tests/qemuxml2argvtest.c | 7 +++++ 5 files changed, 89 insertions(+) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.xml diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args new file mode 100644 index 0000000..1b2603e --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.args @@ -0,0 +1,9 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S \ +-M s390-ccw -m 214 -smp 1 -nographic -nodefaults \ +-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \ +-device virtio-scsi-ccw,id=scsi0,devno=fe.0.0001 \ +-usb -drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-virtio-disk0 \ +-device virtio-blk-ccw,devno=fe.0.0000,drive=drive-virtio-disk0,id=virtio-disk0 \ +-drive file=/dev/HostVG/QEMUGuest2,if=none,id=drive-scsi0-0-4-0 \ +-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=4,lun=0,drive=drive-scsi0-0-4-0,id=scsi0-0-4-0 \ +-device virtio-balloon-ccw,id=balloon0,devno=fe.0.000a diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.xml new file mode 100644 index 0000000..4ccd1c2 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-virtio-scsi-ccw.xml @@ -0,0 +1,31 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219136</memory> + <currentMemory>219136</currentMemory> + <vcpu>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw'>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> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='vda' bus='virtio'/> + </disk> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest2'/> + <target dev='sda' bus='scsi'/> + <address type='drive' controller='0' bus='0' target='4' unit='0'/> + </disk> + <controller type='scsi' index='0' model='virtio-scsi'/> + <memballoon model='virtio'> + <address type='ccw' cssid='0xFe' ssid='0x0' devno='0xA'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args new file mode 100644 index 0000000..5f9cef5 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.args @@ -0,0 +1,12 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M \ +s390-ccw -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 \ +-device virtio-serial-ccw,id=virtio-serial0,devno=fe.0.0001 \ +-usb -drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-virtio-disk0 \ +-device virtio-blk-ccw,devno=fe.0.0000,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \ +-chardev pty,id=charconsole0 \ +-device virtconsole,chardev=charconsole0,id=console0 \ +-device virtio-balloon-ccw,id=balloon0,devno=fe.0.000a \ +-object rng-random,id=rng0,filename=/dev/hwrng \ +-device virtio-rng-ccw,rng=rng0,devno=fe.0.0002 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.xml b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.xml new file mode 100644 index 0000000..aa2cc02 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-virtio-rng-ccw.xml @@ -0,0 +1,30 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219100</memory> + <currentMemory>219100</currentMemory> + <os> + <type arch='s390x' machine='s390-ccw'>hvm</type> + </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> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='virtio'/> + <boot order='1'/> + </disk> + <console type='pty'> + <target type='virtio'/> + </console> + <memballoon model='virtio'> + <address type='ccw' cssid='0xfe' ssid='0' devno='0x000a'/> + </memballoon> + <rng model='virtio'> + <backend model='random'>/dev/hwrng</backend> + </rng> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index a9a5557..8f7ccee 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -444,6 +444,8 @@ mymain(void) QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); DO_TEST("disk-virtio-ccw-many", QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); + DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_DRIVE, QEMU_CAPS_VIRTIO_SCSI, + QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_CCW, QEMU_CAPS_VIRTIO_S390); DO_TEST("disk-order", QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_DRIVE_BOOT, QEMU_CAPS_VIRTIO_BLK_SCSI, QEMU_CAPS_VIRTIO_BLK_SG_IO); @@ -900,6 +902,11 @@ mymain(void) QEMU_CAPS_OBJECT_RNG_RANDOM); DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD); + DO_TEST("virtio-rng-ccw", + QEMU_CAPS_DEVICE, QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_DRIVE, QEMU_CAPS_BOOTINDEX, QEMU_CAPS_VIRTIO_CCW, + QEMU_CAPS_VIRTIO_S390, QEMU_CAPS_DEVICE_VIRTIO_RNG, + QEMU_CAPS_OBJECT_RNG_RANDOM); virObjectUnref(driver.config); virObjectUnref(driver.caps); -- 1.7.9.5
participants (3)
-
Daniel P. Berrange
-
Eric Blake
-
Viktor Mihajlovski