We have to always store the state of the feature in the
virDomainDef struct, otherwise
<smm state='off'/>
will incorrectly be interpreted as if the <smm> element was not
present.
Fixes: eeb94215b074a71b3c8932d5fcaf657f269b2c82
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
src/conf/domain_conf.c | 9 ++++++---
.../qemuxml2argvdata/machine-smm-off.x86_64-latest.args | 2 +-
.../qemuxml2xmloutdata/machine-smm-off.x86_64-latest.xml | 3 +++
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d9b55c80aa..70562cc993 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -17676,8 +17676,12 @@ virDomainFeaturesDefParse(virDomainDef *def,
VIR_XML_PROP_NONE, &state) < 0)
return -1;
- if ((state == VIR_TRISTATE_SWITCH_ABSENT) ||
- (state == VIR_TRISTATE_SWITCH_ON)) {
+ if (state == VIR_TRISTATE_SWITCH_ABSENT)
+ state = VIR_TRISTATE_SWITCH_ON;
+
+ def->features[val] = state;
+
+ if (state == VIR_TRISTATE_SWITCH_ON) {
int rv = virParseScaledValue("string(./features/smm/tseg)",
"string(./features/smm/tseg/@unit)",
ctxt,
@@ -17688,7 +17692,6 @@ virDomainFeaturesDefParse(virDomainDef *def,
if (rv < 0)
return -1;
- def->features[val] = VIR_TRISTATE_SWITCH_ON;
def->tseg_specified = rv != 0;
}
break;
diff --git a/tests/qemuxml2argvdata/machine-smm-off.x86_64-latest.args
b/tests/qemuxml2argvdata/machine-smm-off.x86_64-latest.args
index b5a685524e..46f6a4a70c 100644
--- a/tests/qemuxml2argvdata/machine-smm-off.x86_64-latest.args
+++ b/tests/qemuxml2argvdata/machine-smm-off.x86_64-latest.args
@@ -10,7 +10,7 @@ XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \
-name guest=QEMUGuest1,debug-threads=on \
-S \
-object
'{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}'
\
--machine q35,usb=off,dump-guest-core=off,memory-backend=pc.ram \
+-machine q35,usb=off,smm=off,dump-guest-core=off,memory-backend=pc.ram \
-accel tcg \
-cpu qemu64 \
-m 214 \
diff --git a/tests/qemuxml2xmloutdata/machine-smm-off.x86_64-latest.xml
b/tests/qemuxml2xmloutdata/machine-smm-off.x86_64-latest.xml
index 1d58c22892..77b0b39750 100644
--- a/tests/qemuxml2xmloutdata/machine-smm-off.x86_64-latest.xml
+++ b/tests/qemuxml2xmloutdata/machine-smm-off.x86_64-latest.xml
@@ -8,6 +8,9 @@
<type arch='x86_64' machine='q35'>hvm</type>
<boot dev='hd'/>
</os>
+ <features>
+ <smm state='off'/>
+ </features>
<cpu mode='custom' match='exact' check='none'>
<model fallback='forbid'>qemu64</model>
</cpu>
--
2.35.3