static int
qemuValidateDomainDeviceDefVideo(const virDomainVideoDef *video,
+ const virDomainDef *def,
virQEMUCaps *qemuCaps)
{
virDomainCapsDeviceVideo videoCaps = { 0 };
}
if (video->type == VIR_DOMAIN_VIDEO_TYPE_VIRTIO) {
- if (video->blob != VIR_TRISTATE_SWITCH_ABSENT &&
- !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_BLOB)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("this QEMU does not support 'blob' for virtio-gpu devices"));
- return -1;
+ if (video->blob != VIR_TRISTATE_SWITCH_ABSENT) {
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_GPU_BLOB)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("this QEMU does not support 'blob' for virtio-gpu devices"));
+ return -1;
+ }
+ if (video->blob == VIR_TRISTATE_SWITCH_ON
+ && def->mem.source != VIR_DOMAIN_MEMORY_SOURCE_MEMFD) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("'blob' support for virtio-gpu devices requires a memfd memory backend"));
+ return -1;
+ }
}
}
qemuCaps);
case VIR_DOMAIN_DEVICE_VIDEO:
- return qemuValidateDomainDeviceDefVideo(dev->data.video, qemuCaps);
+ return qemuValidateDomainDeviceDefVideo(dev->data.video, def, qemuCaps);
case VIR_DOMAIN_DEVICE_DISK:
return qemuValidateDomainDeviceDefDisk(dev->data.disk, def, qemuCaps);
-accel tcg \
-cpu qemu64 \
-m size=1048576k \
--object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":1073741824}' \
+-object '{"qom-type":"memory-backend-memfd","id":"pc.ram","x-use-canonical-path-for-ramblock-id":false,"size":1073741824}' \
-overcommit mem-lock=off \
-smp 1,sockets=1,cores=1,threads=1 \
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \