]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: Simplify setting HyperV features
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 30 Sep 2025 08:47:21 +0000 (10:47 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 15 Oct 2025 08:04:11 +0000 (10:04 +0200)
Inside of libxlMakeDomBuildInfo() there's a huge switch() for
each virDomainHyperv case. Instead of checking whether feature is
enabled in each 'case', let's just check it at the beginning of
each loop.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/libxl/libxl_conf.c

index 0cbc09b6b0ebd8f58ed5c8f675a3adc368031673..cea4bd801cfb1fa8409894054d3df15f1695f97a 100644 (file)
@@ -608,60 +608,49 @@ libxlMakeDomBuildInfo(virDomainDef *def,
             }
 
             for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
+                if (def->hyperv_features[i] != VIR_TRISTATE_SWITCH_ON)
+                    continue;
+
                 switch ((virDomainHyperv) i) {
                 case VIR_DOMAIN_HYPERV_VPINDEX:
                 case VIR_DOMAIN_HYPERV_RELAXED:
                     /* Already set by base flag */
                     break;
                 case VIR_DOMAIN_HYPERV_SYNIC:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_SYNIC);
-                    }
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_SYNIC);
                     break;
                 case VIR_DOMAIN_HYPERV_STIMER:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        /* STIMER implies synic and clock features */
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_STIMER);
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_SYNIC);
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_TIME_REF_COUNT);
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_REFERENCE_TSC);
-                    }
+                    /* STIMER implies synic and clock features */
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_STIMER);
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_SYNIC);
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_TIME_REF_COUNT);
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_REFERENCE_TSC);
                     break;
                 case VIR_DOMAIN_HYPERV_VAPIC:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_APIC_ASSIST);
-                    }
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_APIC_ASSIST);
                     break;
                 case VIR_DOMAIN_HYPERV_FREQUENCIES:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_FREQ);
-                    }
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_FREQ);
                     break;
                 case VIR_DOMAIN_HYPERV_TLBFLUSH:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_HCALL_REMOTE_TLB_FLUSH);
-                    }
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_HCALL_REMOTE_TLB_FLUSH);
                     break;
                 case VIR_DOMAIN_HYPERV_IPI:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
-                                         LIBXL_VIRIDIAN_ENLIGHTENMENT_HCALL_IPI);
-                    }
+                    libxl_bitmap_set(&b_info->u.hvm.viridian_enable,
+                                     LIBXL_VIRIDIAN_ENLIGHTENMENT_HCALL_IPI);
                     break;
                 case VIR_DOMAIN_HYPERV_SPINLOCKS:
                 case VIR_DOMAIN_HYPERV_VENDOR_ID:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        const char *name = virDomainHypervTypeToString(i);
-                        VIR_WARN("Hyper-v flag '%s' specified per-domain but is a global Xen setting and will be ignored.", name);
-                    }
+                    VIR_WARN("Hyper-v flag '%s' specified per-domain but is a global Xen setting and will be ignored.",
+                             virDomainHypervTypeToString(i));
                     break;
                 case VIR_DOMAIN_HYPERV_RUNTIME:
                 case VIR_DOMAIN_HYPERV_RESET:
@@ -670,11 +659,9 @@ libxlMakeDomBuildInfo(virDomainDef *def,
                 case VIR_DOMAIN_HYPERV_AVIC:
                 case VIR_DOMAIN_HYPERV_EMSR_BITMAP:
                 case VIR_DOMAIN_HYPERV_XMM_INPUT:
-                    if (def->hyperv_features[i] == VIR_TRISTATE_SWITCH_ON) {
-                        const char *name = virDomainHypervTypeToString(i);
-                        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                            _("Hyper-v enlightenment feature '%1$s' is not supported for Xen domains."), name);
-                    }
+                    virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                   _("Hyper-v enlightenment feature '%1$s' is not supported for Xen domains."),
+                                   virDomainHypervTypeToString(i));
                     break;
                 case VIR_DOMAIN_HYPERV_LAST:
                     break;