提交 caa6dc3b 编写于 作者: P Peter Krempa

domaincaps: Store domain capability features in an array

Declare the capabilities as enum values and store them in an array. This
makes adding new features more straightforward and simplifies the
formatter which now doesn't require changing.
Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 ae92101b
...@@ -33,6 +33,15 @@ VIR_ENUM_IMPL(virDomainCapsCPUUsable, ...@@ -33,6 +33,15 @@ VIR_ENUM_IMPL(virDomainCapsCPUUsable,
"unknown", "yes", "no", "unknown", "yes", "no",
); );
VIR_ENUM_DECL(virDomainCapsFeature);
VIR_ENUM_IMPL(virDomainCapsFeature,
VIR_DOMAIN_CAPS_FEATURE_LAST,
"iothreads",
"vmcoreinfo",
"genid",
);
static virClassPtr virDomainCapsClass; static virClassPtr virDomainCapsClass;
static virClassPtr virDomainCapsCPUModelsClass; static virClassPtr virDomainCapsCPUModelsClass;
...@@ -317,9 +326,10 @@ virDomainCapsEnumClear(virDomainCapsEnumPtr capsEnum) ...@@ -317,9 +326,10 @@ virDomainCapsEnumClear(virDomainCapsEnumPtr capsEnum)
void void
virDomainCapsFeaturesInitUnsupported(virDomainCapsPtr caps) virDomainCapsFeaturesInitUnsupported(virDomainCapsPtr caps)
{ {
caps->iothreads = VIR_TRISTATE_BOOL_NO; size_t i;
caps->vmcoreinfo = VIR_TRISTATE_BOOL_NO;
caps->genid = VIR_TRISTATE_BOOL_NO; for (i = 0; i < VIR_DOMAIN_CAPS_FEATURE_LAST; i++)
caps->features[i] = VIR_TRISTATE_BOOL_NO;
} }
...@@ -612,10 +622,19 @@ virDomainCapsFormatFeatures(const virDomainCaps *caps, ...@@ -612,10 +622,19 @@ virDomainCapsFormatFeatures(const virDomainCaps *caps,
virBufferPtr buf) virBufferPtr buf)
{ {
g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf); g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
size_t i;
virDomainCapsFeatureGICFormat(&childBuf, &caps->gic); virDomainCapsFeatureGICFormat(&childBuf, &caps->gic);
qemuDomainCapsFeatureFormatSimple(&childBuf, "vmcoreinfo", caps->vmcoreinfo);
qemuDomainCapsFeatureFormatSimple(&childBuf, "genid", caps->genid); for (i = 0; i < VIR_DOMAIN_CAPS_FEATURE_LAST; i++) {
if (i == VIR_DOMAIN_CAPS_FEATURE_IOTHREADS)
continue;
qemuDomainCapsFeatureFormatSimple(&childBuf,
virDomainCapsFeatureTypeToString(i),
caps->features[i]);
}
virDomainCapsFeatureSEVFormat(&childBuf, caps->sev); virDomainCapsFeatureSEVFormat(&childBuf, caps->sev);
virXMLFormatElement(buf, "features", NULL, &childBuf); virXMLFormatElement(buf, "features", NULL, &childBuf);
...@@ -641,7 +660,8 @@ virDomainCapsFormat(const virDomainCaps *caps) ...@@ -641,7 +660,8 @@ virDomainCapsFormat(const virDomainCaps *caps)
if (caps->maxvcpus) if (caps->maxvcpus)
virBufferAsprintf(&buf, "<vcpu max='%d'/>\n", caps->maxvcpus); virBufferAsprintf(&buf, "<vcpu max='%d'/>\n", caps->maxvcpus);
qemuDomainCapsFeatureFormatSimple(&buf, "iothreads", caps->iothreads); qemuDomainCapsFeatureFormatSimple(&buf, "iothreads",
caps->features[VIR_DOMAIN_CAPS_FEATURE_IOTHREADS]);
virDomainCapsOSFormat(&buf, &caps->os); virDomainCapsOSFormat(&buf, &caps->os);
virDomainCapsCPUFormat(&buf, &caps->cpu); virDomainCapsCPUFormat(&buf, &caps->cpu);
......
...@@ -156,6 +156,14 @@ struct _virSEVCapability { ...@@ -156,6 +156,14 @@ struct _virSEVCapability {
unsigned int reduced_phys_bits; unsigned int reduced_phys_bits;
}; };
typedef enum {
VIR_DOMAIN_CAPS_FEATURE_IOTHREADS = 0,
VIR_DOMAIN_CAPS_FEATURE_VMCOREINFO,
VIR_DOMAIN_CAPS_FEATURE_GENID,
VIR_DOMAIN_CAPS_FEATURE_LAST
} virDomainCapsFeature;
struct _virDomainCaps { struct _virDomainCaps {
virObjectLockable parent; virObjectLockable parent;
...@@ -166,7 +174,6 @@ struct _virDomainCaps { ...@@ -166,7 +174,6 @@ struct _virDomainCaps {
/* Some machine specific info */ /* Some machine specific info */
int maxvcpus; int maxvcpus;
virTristateBool iothreads; /* Whether I/O threads are supported or not. */
virDomainCapsOS os; virDomainCapsOS os;
virDomainCapsCPU cpu; virDomainCapsCPU cpu;
...@@ -178,10 +185,10 @@ struct _virDomainCaps { ...@@ -178,10 +185,10 @@ struct _virDomainCaps {
/* add new domain devices here */ /* add new domain devices here */
virDomainCapsFeatureGIC gic; virDomainCapsFeatureGIC gic;
virTristateBool vmcoreinfo;
virTristateBool genid;
virSEVCapabilityPtr sev; virSEVCapabilityPtr sev;
/* add new domain features here */ /* add new domain features here */
virTristateBool features[VIR_DOMAIN_CAPS_FEATURE_LAST];
}; };
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainCaps, virObjectUnref); G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainCaps, virObjectUnref);
......
...@@ -5285,7 +5285,7 @@ static void ...@@ -5285,7 +5285,7 @@ static void
virQEMUCapsFillDomainIOThreadCaps(virQEMUCapsPtr qemuCaps, virQEMUCapsFillDomainIOThreadCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsPtr domCaps) virDomainCapsPtr domCaps)
{ {
domCaps->iothreads = virTristateBoolFromBool( domCaps->features[VIR_DOMAIN_CAPS_FEATURE_IOTHREADS] = virTristateBoolFromBool(
virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)); virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD));
} }
...@@ -5584,10 +5584,10 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps, ...@@ -5584,10 +5584,10 @@ virQEMUCapsFillDomainCaps(virCapsPtr caps,
domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus); domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
} }
domCaps->vmcoreinfo = virTristateBoolFromBool( domCaps->features[VIR_DOMAIN_CAPS_FEATURE_VMCOREINFO] = virTristateBoolFromBool(
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMCOREINFO)); virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMCOREINFO));
domCaps->genid = virTristateBoolFromBool( domCaps->features[VIR_DOMAIN_CAPS_FEATURE_GENID] = virTristateBoolFromBool(
virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID)); virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID));
if (virQEMUCapsFillDomainOSCaps(os, if (virQEMUCapsFillDomainOSCaps(os,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册