}
+struct virQEMUCapsDomainFeatureCapabilityTuple {
+ virDomainCapsFeature domcap;
+ virQEMUCapsFlags qemucap;
+};
+
+/**
+ * This maps the qemu features to the entries in <features> of the domain
+ * capability XML.
+ * */
+static const struct virQEMUCapsDomainFeatureCapabilityTuple domCapsTuples[] = {
+ { VIR_DOMAIN_CAPS_FEATURE_IOTHREADS, QEMU_CAPS_OBJECT_IOTHREAD },
+ { VIR_DOMAIN_CAPS_FEATURE_VMCOREINFO, QEMU_CAPS_DEVICE_VMCOREINFO },
+ { VIR_DOMAIN_CAPS_FEATURE_GENID, QEMU_CAPS_DEVICE_VMGENID },
+};
+
+
static void
-virQEMUCapsFillDomainIOThreadCaps(virQEMUCapsPtr qemuCaps,
- virDomainCapsPtr domCaps)
+virQEMUCapsFillDomainFeaturesFromQEMUCaps(virQEMUCapsPtr qemuCaps,
+ virDomainCapsPtr domCaps)
{
- domCaps->features[VIR_DOMAIN_CAPS_FEATURE_IOTHREADS] = virTristateBoolFromBool(
- virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD));
+ size_t i;
+
+ for (i = 0; i < G_N_ELEMENTS(domCapsTuples); i++) {
+ if (virQEMUCapsGet(qemuCaps, domCapsTuples[i].qemucap))
+ domCaps->features[domCapsTuples[i].domcap] = VIR_TRISTATE_BOOL_YES;
+ }
}
virDomainCapsDeviceRNGPtr rng = &domCaps->rng;
virDomainCapsFeaturesInitUnsupported(domCaps);
+ virQEMUCapsFillDomainFeaturesFromQEMUCaps(qemuCaps, domCaps);
domCaps->maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps,
domCaps->machine);
domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
}
- domCaps->features[VIR_DOMAIN_CAPS_FEATURE_VMCOREINFO] = virTristateBoolFromBool(
- virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMCOREINFO));
-
- domCaps->features[VIR_DOMAIN_CAPS_FEATURE_GENID] = virTristateBoolFromBool(
- virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID));
-
if (virQEMUCapsFillDomainOSCaps(os,
domCaps->machine,
domCaps->arch,
return -1;
virQEMUCapsFillDomainCPUCaps(caps, qemuCaps, domCaps);
- virQEMUCapsFillDomainIOThreadCaps(qemuCaps, domCaps);
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk);
virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics);
virQEMUCapsFillDomainDeviceVideoCaps(qemuCaps, video);