qemu: process: Split out logic for setting the 'allowReboot' internal flag

Split out the logic which was used to determine whether qemu should
allow the guest OS to reboot for QEMU versions which don't support the
'set-action' QMP command.

Signed-off-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Masayoshi Mizuma 2021-08-30 00:30:42 -04:00 committed by Peter Krempa
parent b6ec01b821
commit a2e6039cca
2 changed files with 21 additions and 8 deletions

View File

@ -6361,6 +6361,24 @@ qemuProcessPrepareHostHostdevs(virDomainObj *vm)
}
/**
* qemuProcessRebootAllowed:
* @def: domain definition
*
* This function encapsulates the logic which dictated whether '-no-reboot' was
* used instead of '-no-shutdown' which is used QEMU versions which don't
* support the 'set-action' QMP command.
*/
bool
qemuProcessRebootAllowed(const virDomainDef *def)
{
return def->onReboot != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY ||
def->onPoweroff != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY ||
(def->onCrash != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY &&
def->onCrash != VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY);
}
static void
qemuProcessPrepareAllowReboot(virDomainObj *vm)
{
@ -6375,14 +6393,7 @@ qemuProcessPrepareAllowReboot(virDomainObj *vm)
if (priv->allowReboot != VIR_TRISTATE_BOOL_ABSENT)
return;
if (def->onReboot == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY &&
def->onPoweroff == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY &&
(def->onCrash == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY ||
def->onCrash == VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY)) {
priv->allowReboot = VIR_TRISTATE_BOOL_NO;
} else {
priv->allowReboot = VIR_TRISTATE_BOOL_YES;
}
priv->allowReboot = virTristateBoolFromBool(qemuProcessRebootAllowed(def));
}

View File

@ -242,3 +242,5 @@ void qemuProcessQMPFree(qemuProcessQMP *proc);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuProcessQMP, qemuProcessQMPFree);
int qemuProcessQMPStart(qemuProcessQMP *proc);
bool qemuProcessRebootAllowed(const virDomainDef *def);