
On Wed, Jul 12, 2017 at 02:56:50PM +0200, Jiri Denemark wrote:
Separated from qemuProcessUpdateAndVerifyCPU to handle updating of an active guest CPU definition according to live data from QEMU.
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> --- src/qemu/qemu_process.c | 70 +++++++++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 28 deletions(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ebd13057b..926c64197 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4011,17 +4011,53 @@ qemuProcessVerifyCPU(virDomainObjPtr vm,
static int +qemuProcessUpdateLiveGuestCPU(virDomainObjPtr vm, + virCPUDataPtr enabled, + virCPUDataPtr disabled) +{ + virDomainDefPtr def = vm->def; + qemuDomainObjPrivatePtr priv = vm->privateData; + virCPUDefPtr orig = NULL; + int rc; + int ret = -1; + + if (!enabled || + !def->cpu || + (def->cpu->mode == VIR_CPU_MODE_CUSTOM && + !def->cpu->model))
Now the condition is extended by another check, this makes the code fragile. I would prefer separating the "!enabled".
+ return 0; + + if (!(orig = virCPUDefCopy(def->cpu))) + goto cleanup; + + if ((rc = virCPUUpdateLive(def->os.arch, def->cpu, enabled, disabled)) < 0) { + goto cleanup; + } else if (rc == 0) { + /* Store the original CPU in priv if QEMU changed it and we didn't + * get the original CPU via migration, restore, or snapshot revert. + */ + if (!priv->origCPU && !virCPUDefIsEqual(def->cpu, orig, false)) + VIR_STEAL_PTR(priv->origCPU, orig); + + def->cpu->check = VIR_CPU_CHECK_FULL; + } + + ret = 0; + + cleanup: + virCPUDefFree(orig); + return ret; +}
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>