Re: [libvirt] [PATCH 10/11] conf: Improve HPT feature handling
On 02/06/2018 11:42 AM, Andrea Bolognani wrote: > Instead of storing separately whether the feature is enabled > or not and what resizing policy should be used, store both of > them in a single place. > > Signed-off-by: Andrea Bolognani> --- > src/conf/domain_conf.c | 26 -- > src/conf/domain_conf.h | 4 ++-- > src/qemu/qemu_command.c | 4 ++-- > src/qemu/qemu_domain.c | 2 +- > 4 files changed, 17 insertions(+), 19 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 19884ec13..c1d549594 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -906,6 +906,7 @@ VIR_ENUM_IMPL(virDomainIOAPIC, > > VIR_ENUM_IMPL(virDomainHPTResizing, >VIR_DOMAIN_HPT_RESIZING_LAST, > + "none", >"enabled", >"disabled", >"required", > @@ -19239,14 +19240,13 @@ virDomainDefParseXML(xmlDocPtr xml, > tmp = virXMLPropString(nodes[i], "resizing"); > if (tmp) { > int value = virDomainHPTResizingTypeFromString(tmp); > -if (value < 0) { > +if (value < 0 || value == VIR_DOMAIN_HPT_RESIZING_NONE) { Similar note as w/ previous and rng schema. Here too I'm fine with this way, but if someone else isn't hopefully they speak up. > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > _("Unknown HPT resizing setting: %s"), > tmp); > goto error; > } > -def->hpt_resizing = value; > -def->features[val] = VIR_TRISTATE_SWITCH_ON; > +def->features[val] = value; > VIR_FREE(tmp); > } > break; > @@ -21377,16 +21377,13 @@ > virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, > break; > > case VIR_DOMAIN_FEATURE_HPT: > -if (src->features[i] != dst->features[i] || > -src->hpt_resizing != dst->hpt_resizing) { > +if (src->features[i] != dst->features[i]) { > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > _("State of feature '%s:%s' differs: " > - "source: '%s:%s', destination: '%s:%s'"), > + "source: '%s', destination: '%s'"), > featureName, "resizing", > - > virTristateSwitchTypeToString(src->features[i]), > - > virDomainHPTResizingTypeToString(src->hpt_resizing), > - > virTristateSwitchTypeToString(dst->features[i]), > - > virDomainHPTResizingTypeToString(dst->hpt_resizing)); > + > virDomainHPTResizingTypeToString(src->features[i]), > + > virDomainHPTResizingTypeToString(dst->features[i])); > return false; > } > break; > @@ -26947,10 +26944,11 @@ virDomainDefFormatInternal(virDomainDefPtr def, > break; > > case VIR_DOMAIN_FEATURE_HPT: > -if (def->features[i] == VIR_TRISTATE_SWITCH_ON) { > -virBufferAsprintf(buf, "\n", > - > virDomainHPTResizingTypeToString(def->hpt_resizing)); > -} > +if (def->features[i] == VIR_DOMAIN_HPT_RESIZING_NONE) > +break; > + > +virBufferAsprintf(buf, "\n", > + > virDomainHPTResizingTypeToString(def->features[i])); > break; > > /* coverity[dead_error_begin] */ > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > index 20f0efc36..4e9044ae6 100644 > --- a/src/conf/domain_conf.h > +++ b/src/conf/domain_conf.h > @@ -1871,7 +1871,8 @@ typedef enum { > VIR_ENUM_DECL(virDomainIOAPIC); > > typedef enum { > -VIR_DOMAIN_HPT_RESIZING_ENABLED = 0, > +VIR_DOMAIN_HPT_RESIZING_NONE = 0, > +VIR_DOMAIN_HPT_RESIZING_ENABLED, > VIR_DOMAIN_HPT_RESIZING_DISABLED, > VIR_DOMAIN_HPT_RESIZING_REQUIRED, > > @@ -2364,7 +2365,6 @@ struct _virDomainDef { The comment a few lines above here should be updated to include: * VIR_DOMAIN_FEATURE_HPT is of type virDomainHPTResizing Reviewed-by: John Ferlan John > unsigned int hyperv_spinlocks; > virGICVersion gic_version; > char *hyperv_vendor_id; > -virDomainHPTResizing hpt_resizing; > > /* These options are of type virTristateSwitch: ON = keep, OFF = drop */ > int caps_features[VIR_DOMAIN_CAPS_FEATURE_LAST]; [...] -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
[libvirt] [PATCH 10/11] conf: Improve HPT feature handling
Instead of storing separately whether the feature is enabled or not and what resizing policy should be used, store both of them in a single place. Signed-off-by: Andrea Bolognani--- src/conf/domain_conf.c | 26 -- src/conf/domain_conf.h | 4 ++-- src/qemu/qemu_command.c | 4 ++-- src/qemu/qemu_domain.c | 2 +- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 19884ec13..c1d549594 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -906,6 +906,7 @@ VIR_ENUM_IMPL(virDomainIOAPIC, VIR_ENUM_IMPL(virDomainHPTResizing, VIR_DOMAIN_HPT_RESIZING_LAST, + "none", "enabled", "disabled", "required", @@ -19239,14 +19240,13 @@ virDomainDefParseXML(xmlDocPtr xml, tmp = virXMLPropString(nodes[i], "resizing"); if (tmp) { int value = virDomainHPTResizingTypeFromString(tmp); -if (value < 0) { +if (value < 0 || value == VIR_DOMAIN_HPT_RESIZING_NONE) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unknown HPT resizing setting: %s"), tmp); goto error; } -def->hpt_resizing = value; -def->features[val] = VIR_TRISTATE_SWITCH_ON; +def->features[val] = value; VIR_FREE(tmp); } break; @@ -21377,16 +21377,13 @@ virDomainDefFeaturesCheckABIStability(virDomainDefPtr src, break; case VIR_DOMAIN_FEATURE_HPT: -if (src->features[i] != dst->features[i] || -src->hpt_resizing != dst->hpt_resizing) { +if (src->features[i] != dst->features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of feature '%s:%s' differs: " - "source: '%s:%s', destination: '%s:%s'"), + "source: '%s', destination: '%s'"), featureName, "resizing", - virTristateSwitchTypeToString(src->features[i]), - virDomainHPTResizingTypeToString(src->hpt_resizing), - virTristateSwitchTypeToString(dst->features[i]), - virDomainHPTResizingTypeToString(dst->hpt_resizing)); + virDomainHPTResizingTypeToString(src->features[i]), + virDomainHPTResizingTypeToString(dst->features[i])); return false; } break; @@ -26947,10 +26944,11 @@ virDomainDefFormatInternal(virDomainDefPtr def, break; case VIR_DOMAIN_FEATURE_HPT: -if (def->features[i] == VIR_TRISTATE_SWITCH_ON) { -virBufferAsprintf(buf, "\n", - virDomainHPTResizingTypeToString(def->hpt_resizing)); -} +if (def->features[i] == VIR_DOMAIN_HPT_RESIZING_NONE) +break; + +virBufferAsprintf(buf, "\n", + virDomainHPTResizingTypeToString(def->features[i])); break; /* coverity[dead_error_begin] */ diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 20f0efc36..4e9044ae6 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1871,7 +1871,8 @@ typedef enum { VIR_ENUM_DECL(virDomainIOAPIC); typedef enum { -VIR_DOMAIN_HPT_RESIZING_ENABLED = 0, +VIR_DOMAIN_HPT_RESIZING_NONE = 0, +VIR_DOMAIN_HPT_RESIZING_ENABLED, VIR_DOMAIN_HPT_RESIZING_DISABLED, VIR_DOMAIN_HPT_RESIZING_REQUIRED, @@ -2364,7 +2365,6 @@ struct _virDomainDef { unsigned int hyperv_spinlocks; virGICVersion gic_version; char *hyperv_vendor_id; -virDomainHPTResizing hpt_resizing; /* These options are of type virTristateSwitch: ON = keep, OFF = drop */ int caps_features[VIR_DOMAIN_CAPS_FEATURE_LAST]; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 3aabdf7a2..faf09a599 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -7266,7 +7266,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, } } -if (def->features[VIR_DOMAIN_FEATURE_HPT] == VIR_TRISTATE_SWITCH_ON) { +if (def->features[VIR_DOMAIN_FEATURE_HPT] != VIR_DOMAIN_HPT_RESIZING_NONE) { const char *str; if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_PSERIES_RESIZE_HPT)) { @@ -7276,7 +7276,7 @@ qemuBuildMachineCommandLine(virCommandPtr cmd, goto cleanup; } -str = virDomainHPTResizingTypeToString(def->hpt_resizing); +str =