mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
qemu: Add support for virtio-gpu-ccw video device on S390
QEMU on S390 (since v2.11) can support the virtio-gpu-ccw device, which can be used as a video device. Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
This commit is contained in:
parent
a6441402a5
commit
4bbf7f8cb5
@ -6484,6 +6484,9 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<dd>
|
||||
The optional <code>address</code> sub-element can be used to
|
||||
tie the video device to a particular PCI slot.
|
||||
On S390, <code>address</code> can be used to provide the
|
||||
CCW address for the video device (<span class="since">
|
||||
since 4.2.0</span>).
|
||||
</dd>
|
||||
|
||||
<dt><code>driver</code></dt>
|
||||
|
@ -132,7 +132,7 @@ VIR_ENUM_IMPL(qemuDeviceVideoSecondary, VIR_DOMAIN_VIDEO_TYPE_LAST,
|
||||
"", /* don't support vbox */
|
||||
"qxl",
|
||||
"", /* don't support parallels */
|
||||
"virtio-gpu-pci",
|
||||
"virtio-gpu",
|
||||
"" /* don't support gop */);
|
||||
|
||||
VIR_ENUM_DECL(qemuSoundCodec)
|
||||
@ -4296,7 +4296,16 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
|
||||
goto error;
|
||||
}
|
||||
|
||||
virBufferAsprintf(&buf, "%s,id=%s", model, video->info.alias);
|
||||
if (STREQ(model, "virtio-gpu")) {
|
||||
if (video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)
|
||||
virBufferAsprintf(&buf, "%s-ccw", model);
|
||||
else
|
||||
virBufferAsprintf(&buf, "%s-pci", model);
|
||||
} else {
|
||||
virBufferAsprintf(&buf, "%s", model);
|
||||
}
|
||||
|
||||
virBufferAsprintf(&buf, ",id=%s", video->info.alias);
|
||||
|
||||
if (video->accel && video->accel->accel3d == VIR_TRISTATE_SWITCH_ON) {
|
||||
virBufferAsprintf(&buf, ",virgl=%s",
|
||||
|
@ -287,8 +287,8 @@ qemuDomainPrimeVirtioDeviceAddresses(virDomainDefPtr def,
|
||||
{
|
||||
/*
|
||||
declare address-less virtio devices to be of address type 'type'
|
||||
disks, networks, consoles, controllers, memballoon and rng in this
|
||||
order
|
||||
disks, networks, videos, consoles, controllers, memballoon and rng
|
||||
in this order
|
||||
if type is ccw filesystem devices are declared to be of address type ccw
|
||||
*/
|
||||
size_t i;
|
||||
@ -308,6 +308,14 @@ qemuDomainPrimeVirtioDeviceAddresses(virDomainDefPtr def,
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < def->nvideos; i++) {
|
||||
virDomainVideoDefPtr video = def->videos[i];
|
||||
|
||||
if (video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
|
||||
video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO)
|
||||
video->info.type = type;
|
||||
}
|
||||
|
||||
for (i = 0; i < def->ninputs; i++) {
|
||||
if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_VIRTIO &&
|
||||
def->inputs[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
|
||||
|
@ -4778,7 +4778,10 @@ qemuProcessStartValidateVideo(virDomainObjPtr vm,
|
||||
(video->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
|
||||
(video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU))) {
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU)) ||
|
||||
(video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
|
||||
video->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW &&
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW))) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("this QEMU does not support '%s' video device"),
|
||||
virDomainVideoTypeToString(video->type));
|
||||
|
25
tests/qemuxml2argvdata/video-virtio-gpu-ccw.args
Normal file
25
tests/qemuxml2argvdata/video-virtio-gpu-ccw.args
Normal file
@ -0,0 +1,25 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-s390x \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
-M s390-ccw-virtio \
|
||||
-m 214 \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1803 \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=readline \
|
||||
-boot c \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \
|
||||
-device virtio-blk-ccw,devno=fe.0.0000,drive=drive-virtio-disk0,\
|
||||
id=virtio-disk0 \
|
||||
-vnc 127.0.0.1:0 \
|
||||
-device virtio-gpu-ccw,id=video0,max_outputs=1,devno=fe.0.0002 \
|
||||
-device virtio-gpu-ccw,id=video1,max_outputs=1,devno=fe.0.0003 \
|
||||
-device virtio-balloon-ccw,id=balloon0,devno=fe.0.0001
|
@ -3008,6 +3008,13 @@ mymain(void)
|
||||
DO_TEST("disk-many-format-probing", QEMU_CAPS_DRIVE_BOOT);
|
||||
driver.config->allowDiskFormatProbing = false;
|
||||
|
||||
DO_TEST("video-virtio-gpu-ccw", QEMU_CAPS_VIRTIO_CCW,
|
||||
QEMU_CAPS_DEVICE_VIRTIO_GPU,
|
||||
QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
||||
QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS,
|
||||
QEMU_CAPS_VNC,
|
||||
QEMU_CAPS_DEVICE_VIRTIO_GPU_CCW);
|
||||
|
||||
if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
|
||||
virFileDeleteTree(fakerootdir);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user