qemu: Return perf status that affect next boot for shutoff domains

While we set up perf events for a shutoff domain and check the settings,
All of perf events are reported as 'disabled', unless we add --config,
This is redundant for a shutoff domain.

 # virsh domstate $GUEST
shut off

 # virsh perf --domain $GUEST
cmt            : disabled
mbmt           : disabled
mbml           : disabled
......

 # virsh perf --domain $GUEST --enable mbmt
mbmt           : enabled

 # virsh perf --domain $GUEST
cmt            : disabled
mbmt           : disabled
mbml           : disabled
......

Use virDomainObjGetOneDefState instead of virDomainObjGetOneDef to fix
the issue. After patch, The perf event status of a shutoff domain is
reported correctly:

 # virsh domstate $GUEST
shut off

 # virsh perf --domain $GUEST
cmt            : disabled
mbmt           : disabled
mbml           : disabled
......

 # virsh perf --domain $GUEST --enable mbmt
mbmt           : enabled

 # virsh perf --domain $GUEST
cmt            : disabled
mbmt           : enabled
mbml           : disabled
......

Signed-off-by: Lin Ma <lma@suse.de>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Lin Ma 2020-09-11 15:06:09 +08:00 committed by Ján Tomko
parent 308ec831bb
commit 10841b6cb6

View File

@ -9109,6 +9109,7 @@ qemuDomainGetPerfEvents(virDomainPtr dom,
int npar = 0;
size_t i;
int ret = -1;
bool live = false;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG |
@ -9123,7 +9124,7 @@ qemuDomainGetPerfEvents(virDomainPtr dom,
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
goto cleanup;
if (!(def = virDomainObjGetOneDef(vm, flags)))
if (!(def = virDomainObjGetOneDefState(vm, flags, &live)))
goto endjob;
priv = vm->privateData;
@ -9131,7 +9132,7 @@ qemuDomainGetPerfEvents(virDomainPtr dom,
for (i = 0; i < VIR_PERF_EVENT_LAST; i++) {
bool perf_enabled;
if (flags & VIR_DOMAIN_AFFECT_CONFIG)
if ((flags & VIR_DOMAIN_AFFECT_CONFIG) || !live)
perf_enabled = def->perf.events[i] == VIR_TRISTATE_BOOL_YES;
else
perf_enabled = virPerfEventIsEnabled(priv->perf, i);