[libvirt PATCH v2 0/2] conf: Adjust hyperv tlbflush formatting

Including the refactor. Ján Tomko (1): conf: refactor hyperv features formatting Martin Kletzander (1): conf: Adjust hyperv tlbflush formatting src/conf/domain_conf.c | 57 ++++++++++--------- .../qemuxmlconfdata/hyperv.x86_64-latest.xml | 5 +- 2 files changed, 33 insertions(+), 29 deletions(-) -- 2.47.0

Add a nested buffer for whatever sub-elements a particular hyperv feature might have. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 46 +++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 785eb0e539..ba1b3a7398 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -27954,13 +27954,15 @@ virDomainDefFormatFeatures(virBuffer *buf, virBufferAsprintf(&childBuf, "<hyperv mode='%s'>\n", virDomainHyperVModeTypeToString(def->features[i])); - virBufferAdjustIndent(&childBuf, 2); + for (j = 0; j < VIR_DOMAIN_HYPERV_LAST; j++) { + g_auto(virBuffer) hypervAttrBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) hypervChildBuf = VIR_BUFFER_INIT_CHILD(&tmpChildBuf); + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ABSENT) continue; - virBufferAsprintf(&childBuf, "<%s state='%s'", - virDomainHypervTypeToString(j), + virBufferAsprintf(&hypervAttrBuf, " state='%s'", virTristateSwitchTypeToString(def->hyperv_features[j])); switch ((virDomainHyperv) j) { @@ -27978,49 +27980,39 @@ virDomainDefFormatFeatures(virBuffer *buf, case VIR_DOMAIN_HYPERV_AVIC: case VIR_DOMAIN_HYPERV_EMSR_BITMAP: case VIR_DOMAIN_HYPERV_XMM_INPUT: - virBufferAddLit(&childBuf, "/>\n"); break; case VIR_DOMAIN_HYPERV_SPINLOCKS: - if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, "/>\n"); - break; + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ON) { + virBufferAsprintf(&hypervAttrBuf, + " retries='%d'", def->hyperv_spinlocks); } - virBufferAsprintf(&childBuf, " retries='%d'/>\n", - def->hyperv_spinlocks); break; case VIR_DOMAIN_HYPERV_STIMER: - if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, "/>\n"); - break; - } - if (def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, ">\n"); - virBufferAdjustIndent(&childBuf, 2); - virBufferAddLit(&childBuf, "<direct state='on'/>\n"); - virBufferAdjustIndent(&childBuf, -2); - virBufferAddLit(&childBuf, "</stimer>\n"); - } else { - virBufferAddLit(&childBuf, "/>\n"); + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ON && + def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON) { + virBufferAddLit(&hypervChildBuf, "<direct state='on'/>\n"); } break; case VIR_DOMAIN_HYPERV_VENDOR_ID: - if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, "/>\n"); - break; + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ON) { + virBufferEscapeString(&hypervAttrBuf, " value='%s'", + def->hyperv_vendor_id); } - virBufferEscapeString(&childBuf, " value='%s'/>\n", - def->hyperv_vendor_id); break; case VIR_DOMAIN_HYPERV_LAST: break; } + + virXMLFormatElement(&tmpChildBuf, virDomainHypervTypeToString(j), + &hypervAttrBuf, &hypervChildBuf); } - virBufferAdjustIndent(&childBuf, -2); + + virBufferAddBuffer(&childBuf, &tmpChildBuf); virBufferAddLit(&childBuf, "</hyperv>\n"); break; -- 2.47.0

From: Martin Kletzander <mkletzan@redhat.com> Commit 247357cc292a added support for direct and extended modes for tlbflush, but forgot to do the formatting as well. Signed-off-by: Martin Kletzander <mkletzan@redhat.com> Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 11 ++++++++++- tests/qemuxmlconfdata/hyperv.x86_64-latest.xml | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ba1b3a7398..af88d0bcfd 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -27974,7 +27974,6 @@ virDomainDefFormatFeatures(virBuffer *buf, case VIR_DOMAIN_HYPERV_RESET: case VIR_DOMAIN_HYPERV_FREQUENCIES: case VIR_DOMAIN_HYPERV_REENLIGHTENMENT: - case VIR_DOMAIN_HYPERV_TLBFLUSH: case VIR_DOMAIN_HYPERV_IPI: case VIR_DOMAIN_HYPERV_EVMCS: case VIR_DOMAIN_HYPERV_AVIC: @@ -28004,6 +28003,16 @@ virDomainDefFormatFeatures(virBuffer *buf, } break; + case VIR_DOMAIN_HYPERV_TLBFLUSH: + if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) + break; + + if (def->hyperv_tlbflush_direct == VIR_TRISTATE_SWITCH_ON) + virBufferAddLit(&hypervChildBuf, "<direct state='on'/>\n"); + if (def->hyperv_tlbflush_extended == VIR_TRISTATE_SWITCH_ON) + virBufferAddLit(&hypervChildBuf, "<extended state='on'/>\n"); + break; + case VIR_DOMAIN_HYPERV_LAST: break; } diff --git a/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml b/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml index 36d9161fa8..49537188af 100644 --- a/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml +++ b/tests/qemuxmlconfdata/hyperv.x86_64-latest.xml @@ -22,7 +22,10 @@ <vendor_id state='on' value='KVM Hv'/> <frequencies state='on'/> <reenlightenment state='on'/> - <tlbflush state='on'/> + <tlbflush state='on'> + <direct state='on'/> + <extended state='on'/> + </tlbflush> <ipi state='on'/> <evmcs state='on'/> <avic state='on'/> -- 2.47.0

On Mon, Jan 06, 2025 at 06:09:53PM +0100, Ján Tomko wrote:
Including the refactor.
Ján Tomko (1): conf: refactor hyperv features formatting
I partially wanted to leave it to someone newer as a bite sized task, but this works too =) Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
Martin Kletzander (1): conf: Adjust hyperv tlbflush formatting
FWIW, Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
src/conf/domain_conf.c | 57 ++++++++++--------- .../qemuxmlconfdata/hyperv.x86_64-latest.xml | 5 +- 2 files changed, 33 insertions(+), 29 deletions(-)
-- 2.47.0
participants (2)
-
Ján Tomko
-
Martin Kletzander