From 139fcbb9546bc3db1b4384c3f05c427ac9360d45 Mon Sep 17 00:00:00 2001 From: Shmuel Melamud Date: Tue, 5 Jul 2022 04:14:41 +0300 Subject: [PATCH] core: Use virtio-vga driver for VGA If VM is configured with VGA display type, use virtio-vga driver for it. This behaviour is enabled for compatibility version 4.7 or higher. Change-Id: I2476286e90cd84b51e35bd3170affeaee1924951 Bug-Url: https://bugzilla.redhat.com/2038694 Signed-off-by: Shmuel Melamud --- .../org/ovirt/engine/core/common/FeatureSupported.java | 10 ++++++++++ .../ovirt/engine/core/common/config/ConfigValues.java | 3 +++ .../vdsbroker/builder/vminfo/LibvirtVmXmlBuilder.java | 9 ++++++++- .../dbscripts/upgrade/pre_upgrade/0000_config.sql | 2 ++ packaging/etc/engine-config/engine-config.properties | 2 ++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java index 18e2094a58a..69a9544cafd 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java @@ -445,4 +445,14 @@ public static boolean isDedicatePolicySupported(Version version) { public static boolean isReplicateExtendSupported(Version version) { return Version.v4_7.lessOrEquals(version); } + + /** + * Check 'virtio' driver for 'vga' display type is supported. + * + * @param version Compatibility version to check for. + * @return true if 'virtio' driver is supported + */ + public static boolean isVirtioVgaSupported(Version version) { + return supportedInConfig(ConfigValues.VirtioVgaSupported, version); + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java index e81606678ea..769eeecf10e 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java @@ -1612,6 +1612,9 @@ public enum ConfigValues { @TypeConverterAttribute(Boolean.class) EnableBochsDisplay, + @TypeConverterAttribute(Boolean.class) + VirtioVgaSupported, + @TypeConverterAttribute(Integer.class) HostMonitoringWatchdogIntervalInSeconds, diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/builder/vminfo/LibvirtVmXmlBuilder.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/builder/vminfo/LibvirtVmXmlBuilder.java index 10a8e952380..1566b0fb775 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/builder/vminfo/LibvirtVmXmlBuilder.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/builder/vminfo/LibvirtVmXmlBuilder.java @@ -3014,7 +3014,7 @@ void writeVideo(VmDevice device) { if (mdevDisplayOn) { writer.writeAttributeString("type", "none"); } else { - writer.writeAttributeString("type", device.getDevice()); + writer.writeAttributeString("type", getVideoType(device.getDevice())); Object vram = device.getSpecParams().get(VdsProperties.VIDEO_VRAM); writer.writeAttributeString("vram", vram != null ? vram.toString() : "32768"); Object heads = device.getSpecParams().get(VdsProperties.VIDEO_HEADS); @@ -3033,6 +3033,13 @@ void writeVideo(VmDevice device) { writer.writeEndElement(); } + private String getVideoType(String deviceType) { + if (!deviceType.equals("vga")) { + return deviceType; + } + return FeatureSupported.isVirtioVgaSupported(vm.getCompatibilityVersion()) && !legacyVirtio ? "virtio" : "vga"; + } + private void writeDefaultVideo() { writer.writeStartElement("video"); writer.writeStartElement("model"); diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql index dd3dd251b66..80d8660121f 100644 --- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql +++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql @@ -933,6 +933,8 @@ select fn_db_add_config_value_for_versions_up_to('NvramPersistenceSupported', 'f select fn_db_add_config_value_for_versions_up_to('NvramPersistenceSupported', 'true', '4.7'); select fn_db_add_config_value_for_versions_up_to('EnableBochsDisplay','false','4.5'); select fn_db_add_config_value_for_versions_up_to('EnableBochsDisplay','true','4.7'); +select fn_db_add_config_value_for_versions_up_to('VirtioVgaSupported','false','4.6'); +select fn_db_add_config_value_for_versions_up_to('VirtioVgaSupported','true','4.7'); select fn_db_add_config_value_for_versions_up_to('ParallelMigrationsSupported', 'false', '4.6'); select fn_db_add_config_value_for_versions_up_to('ParallelMigrationsSupported', 'true', '4.7'); select fn_db_add_config_value_for_versions_up_to('IsDedicatedSupported', 'false', '4.6'); diff --git a/packaging/etc/engine-config/engine-config.properties b/packaging/etc/engine-config/engine-config.properties index f73c76e79a0..5decb4409ba 100644 --- a/packaging/etc/engine-config/engine-config.properties +++ b/packaging/etc/engine-config/engine-config.properties @@ -593,6 +593,8 @@ NvramPersistenceSupported.description=Enable/Disable NVRAM data persistence. NvramPersistenceSupported.type=Boolean EnableBochsDisplay.type=Boolean EnableBochsDisplay.description=Enable bochs display type support +VirtioVgaSupported.type=Boolean +VirtioVgaSupported.description=Enable virtio-vga driver usage for VGA displays. # Host monitoring watchdog HostMonitoringWatchdogIntervalInSeconds.type=Integer HostMonitoringWatchdogIntervalInSeconds.description="Host monitoring watchdog service interval to check if host monitoring is running."