diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 6c217d9ffb90939195131e6f973f7ae8c00d4554..dccc89f438ceedf5a483a3c2eca0e46054b8355f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -21442,6 +21442,129 @@ virDomainDefHasCapabilitiesFeatures(virDomainDefPtr def)
return false;
}
+
+static int
+virDomainCputuneDefFormat(virBufferPtr buf,
+ virDomainDefPtr def)
+{
+ size_t i;
+ virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
+ int ret = -1;
+
+ virBufferAdjustIndent(&childrenBuf, virBufferGetIndent(buf, false) + 2);
+
+ if (def->cputune.sharesSpecified)
+ virBufferAsprintf(&childrenBuf, "%lu\n",
+ def->cputune.shares);
+ if (def->cputune.period)
+ virBufferAsprintf(&childrenBuf, "%llu\n",
+ def->cputune.period);
+ if (def->cputune.quota)
+ virBufferAsprintf(&childrenBuf, "%lld\n",
+ def->cputune.quota);
+
+ if (def->cputune.emulator_period)
+ virBufferAsprintf(&childrenBuf, "%llu"
+ "\n",
+ def->cputune.emulator_period);
+
+ if (def->cputune.emulator_quota)
+ virBufferAsprintf(&childrenBuf, "%lld"
+ "\n",
+ def->cputune.emulator_quota);
+
+ for (i = 0; i < def->maxvcpus; i++) {
+ char *cpumask;
+ virDomainVcpuInfoPtr vcpu = def->vcpus + i;
+
+ if (!vcpu->cpumask)
+ continue;
+
+ if (!(cpumask = virBitmapFormat(vcpu->cpumask)))
+ goto cleanup;
+
+ virBufferAsprintf(&childrenBuf,
+ "\n", i, cpumask);
+
+ VIR_FREE(cpumask);
+ }
+
+ if (def->cputune.emulatorpin) {
+ char *cpumask;
+ virBufferAddLit(&childrenBuf, "cputune.emulatorpin)))
+ goto cleanup;
+
+ virBufferAsprintf(&childrenBuf, "cpuset='%s'/>\n", cpumask);
+ VIR_FREE(cpumask);
+ }
+
+ for (i = 0; i < def->niothreadids; i++) {
+ char *cpumask;
+
+ /* Ignore iothreadids with no cpumask */
+ if (!def->iothreadids[i]->cpumask)
+ continue;
+
+ virBufferAsprintf(&childrenBuf, "iothreadids[i]->iothread_id);
+
+ if (!(cpumask = virBitmapFormat(def->iothreadids[i]->cpumask)))
+ goto cleanup;
+
+ virBufferAsprintf(&childrenBuf, "cpuset='%s'/>\n", cpumask);
+ VIR_FREE(cpumask);
+ }
+
+ for (i = 0; i < def->cputune.nvcpusched; i++) {
+ virDomainThreadSchedParamPtr sp = &def->cputune.vcpusched[i];
+ char *ids = NULL;
+
+ if (!(ids = virBitmapFormat(sp->ids)))
+ goto cleanup;
+
+ virBufferAsprintf(&childrenBuf, "policy));
+ VIR_FREE(ids);
+
+ if (sp->policy == VIR_PROC_POLICY_FIFO ||
+ sp->policy == VIR_PROC_POLICY_RR)
+ virBufferAsprintf(&childrenBuf, " priority='%d'", sp->priority);
+ virBufferAddLit(&childrenBuf, "/>\n");
+ }
+
+ for (i = 0; i < def->cputune.niothreadsched; i++) {
+ virDomainThreadSchedParamPtr sp = &def->cputune.iothreadsched[i];
+ char *ids = NULL;
+
+ if (!(ids = virBitmapFormat(sp->ids)))
+ goto cleanup;
+
+ virBufferAsprintf(&childrenBuf, "policy));
+ VIR_FREE(ids);
+
+ if (sp->policy == VIR_PROC_POLICY_FIFO ||
+ sp->policy == VIR_PROC_POLICY_RR)
+ virBufferAsprintf(&childrenBuf, " priority='%d'", sp->priority);
+ virBufferAddLit(&childrenBuf, "/>\n");
+ }
+
+ if (virBufferUse(&childrenBuf)) {
+ virBufferAddLit(buf, "\n");
+ virBufferAddBuffer(buf, &childrenBuf);
+ virBufferAddLit(buf, "\n");
+ }
+
+ ret = 0;
+
+ cleanup:
+ virBufferFreeAndReset(&childrenBuf);
+ return ret;
+}
+
+
/* This internal version appends to an existing buffer
* (possibly with auto-indent), rather than flattening
* to string.
@@ -21654,111 +21777,8 @@ virDomainDefFormatInternal(virDomainDefPtr def,
}
}
- /* start format cputune */
- indent = virBufferGetIndent(buf, false);
- virBufferAdjustIndent(&childrenBuf, indent + 2);
- if (def->cputune.sharesSpecified)
- virBufferAsprintf(&childrenBuf, "%lu\n",
- def->cputune.shares);
- if (def->cputune.period)
- virBufferAsprintf(&childrenBuf, "%llu\n",
- def->cputune.period);
- if (def->cputune.quota)
- virBufferAsprintf(&childrenBuf, "%lld\n",
- def->cputune.quota);
-
- if (def->cputune.emulator_period)
- virBufferAsprintf(&childrenBuf, "%llu"
- "\n",
- def->cputune.emulator_period);
-
- if (def->cputune.emulator_quota)
- virBufferAsprintf(&childrenBuf, "%lld"
- "\n",
- def->cputune.emulator_quota);
-
- for (i = 0; i < def->maxvcpus; i++) {
- char *cpumask;
- virDomainVcpuInfoPtr vcpu = def->vcpus + i;
-
- if (!vcpu->cpumask)
- continue;
-
- if (!(cpumask = virBitmapFormat(vcpu->cpumask)))
- goto error;
-
- virBufferAsprintf(&childrenBuf,
- "\n", i, cpumask);
-
- VIR_FREE(cpumask);
- }
-
- if (def->cputune.emulatorpin) {
- char *cpumask;
- virBufferAddLit(&childrenBuf, "cputune.emulatorpin)))
- goto error;
-
- virBufferAsprintf(&childrenBuf, "cpuset='%s'/>\n", cpumask);
- VIR_FREE(cpumask);
- }
-
- for (i = 0; i < def->niothreadids; i++) {
- char *cpumask;
-
- /* Ignore iothreadids with no cpumask */
- if (!def->iothreadids[i]->cpumask)
- continue;
-
- virBufferAsprintf(&childrenBuf, "iothreadids[i]->iothread_id);
-
- if (!(cpumask = virBitmapFormat(def->iothreadids[i]->cpumask)))
- goto error;
-
- virBufferAsprintf(&childrenBuf, "cpuset='%s'/>\n", cpumask);
- VIR_FREE(cpumask);
- }
-
- for (i = 0; i < def->cputune.nvcpusched; i++) {
- virDomainThreadSchedParamPtr sp = &def->cputune.vcpusched[i];
- char *ids = NULL;
-
- if (!(ids = virBitmapFormat(sp->ids)))
- goto error;
- virBufferAsprintf(&childrenBuf, "policy));
- VIR_FREE(ids);
-
- if (sp->policy == VIR_PROC_POLICY_FIFO ||
- sp->policy == VIR_PROC_POLICY_RR)
- virBufferAsprintf(&childrenBuf, " priority='%d'", sp->priority);
- virBufferAddLit(&childrenBuf, "/>\n");
- }
-
- for (i = 0; i < def->cputune.niothreadsched; i++) {
- virDomainThreadSchedParamPtr sp = &def->cputune.iothreadsched[i];
- char *ids = NULL;
-
- if (!(ids = virBitmapFormat(sp->ids)))
- goto error;
- virBufferAsprintf(&childrenBuf, "policy));
- VIR_FREE(ids);
-
- if (sp->policy == VIR_PROC_POLICY_FIFO ||
- sp->policy == VIR_PROC_POLICY_RR)
- virBufferAsprintf(&childrenBuf, " priority='%d'", sp->priority);
- virBufferAddLit(&childrenBuf, "/>\n");
- }
-
- if (virBufferUse(&childrenBuf)) {
- virBufferAddLit(buf, "\n");
- virBufferAddBuffer(buf, &childrenBuf);
- virBufferAddLit(buf, "\n");
- }
- virBufferFreeAndReset(&childrenBuf);
+ if (virDomainCputuneDefFormat(buf, def) < 0)
+ goto error;
if (virDomainNumatuneFormatXML(buf, def->numa) < 0)
goto error;