mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35: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>
|
<dd>
|
||||||
The optional <code>address</code> sub-element can be used to
|
The optional <code>address</code> sub-element can be used to
|
||||||
tie the video device to a particular PCI slot.
|
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>
|
</dd>
|
||||||
|
|
||||||
<dt><code>driver</code></dt>
|
<dt><code>driver</code></dt>
|
||||||
|
@ -132,7 +132,7 @@ VIR_ENUM_IMPL(qemuDeviceVideoSecondary, VIR_DOMAIN_VIDEO_TYPE_LAST,
|
|||||||
"", /* don't support vbox */
|
"", /* don't support vbox */
|
||||||
"qxl",
|
"qxl",
|
||||||
"", /* don't support parallels */
|
"", /* don't support parallels */
|
||||||
"virtio-gpu-pci",
|
"virtio-gpu",
|
||||||
"" /* don't support gop */);
|
"" /* don't support gop */);
|
||||||
|
|
||||||
VIR_ENUM_DECL(qemuSoundCodec)
|
VIR_ENUM_DECL(qemuSoundCodec)
|
||||||
@ -4296,7 +4296,16 @@ qemuBuildDeviceVideoStr(const virDomainDef *def,
|
|||||||
goto error;
|
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) {
|
if (video->accel && video->accel->accel3d == VIR_TRISTATE_SWITCH_ON) {
|
||||||
virBufferAsprintf(&buf, ",virgl=%s",
|
virBufferAsprintf(&buf, ",virgl=%s",
|
||||||
|
@ -287,8 +287,8 @@ qemuDomainPrimeVirtioDeviceAddresses(virDomainDefPtr def,
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
declare address-less virtio devices to be of address type 'type'
|
declare address-less virtio devices to be of address type 'type'
|
||||||
disks, networks, consoles, controllers, memballoon and rng in this
|
disks, networks, videos, consoles, controllers, memballoon and rng
|
||||||
order
|
in this order
|
||||||
if type is ccw filesystem devices are declared to be of address type ccw
|
if type is ccw filesystem devices are declared to be of address type ccw
|
||||||
*/
|
*/
|
||||||
size_t i;
|
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++) {
|
for (i = 0; i < def->ninputs; i++) {
|
||||||
if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_VIRTIO &&
|
if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_VIRTIO &&
|
||||||
def->inputs[i]->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
|
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 &&
|
(video->type == VIR_DOMAIN_VIDEO_TYPE_QXL &&
|
||||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
|
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL)) ||
|
||||||
(video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO &&
|
(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,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
_("this QEMU does not support '%s' video device"),
|
_("this QEMU does not support '%s' video device"),
|
||||||
virDomainVideoTypeToString(video->type));
|
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);
|
DO_TEST("disk-many-format-probing", QEMU_CAPS_DRIVE_BOOT);
|
||||||
driver.config->allowDiskFormatProbing = false;
|
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)
|
if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL)
|
||||||
virFileDeleteTree(fakerootdir);
|
virFileDeleteTree(fakerootdir);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user