提交 eef9f83b 编写于 作者: J Jiri Denemark

qemu: Add qemuProcessUpdateLiveGuestCPU

Separated from qemuProcessUpdateAndVerifyCPU to handle updating of an
active guest CPU definition according to live data from QEMU.
Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
Reviewed-by: NPavel Hrdina <phrdina@redhat.com>
上级 e6ed55e4
...@@ -3999,18 +3999,56 @@ qemuProcessVerifyCPU(virDomainObjPtr vm, ...@@ -3999,18 +3999,56 @@ 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)
return 0;
if (!def->cpu ||
(def->cpu->mode == VIR_CPU_MODE_CUSTOM &&
!def->cpu->model))
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;
}
static int static int
qemuProcessUpdateAndVerifyCPU(virQEMUDriverPtr driver, qemuProcessUpdateAndVerifyCPU(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm,
qemuDomainAsyncJob asyncJob) qemuDomainAsyncJob asyncJob)
{ {
virDomainDefPtr def = vm->def;
virCPUDataPtr cpu = NULL; virCPUDataPtr cpu = NULL;
virCPUDataPtr disabled = NULL; virCPUDataPtr disabled = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
int rc;
int ret = -1; int ret = -1;
virCPUDefPtr orig = NULL;
if (qemuProcessFetchGuestCPU(driver, vm, asyncJob, &cpu, &disabled) < 0) if (qemuProcessFetchGuestCPU(driver, vm, asyncJob, &cpu, &disabled) < 0)
goto cleanup; goto cleanup;
...@@ -4018,36 +4056,14 @@ qemuProcessUpdateAndVerifyCPU(virQEMUDriverPtr driver, ...@@ -4018,36 +4056,14 @@ qemuProcessUpdateAndVerifyCPU(virQEMUDriverPtr driver,
if (qemuProcessVerifyCPU(vm, cpu) < 0) if (qemuProcessVerifyCPU(vm, cpu) < 0)
goto cleanup; goto cleanup;
if (cpu) { if (qemuProcessUpdateLiveGuestCPU(vm, cpu, disabled) < 0)
if (!def->cpu || goto cleanup;
(def->cpu->mode == VIR_CPU_MODE_CUSTOM &&
!def->cpu->model)) {
ret = 0;
goto cleanup;
}
if (!(orig = virCPUDefCopy(def->cpu)))
goto cleanup;
if ((rc = virCPUUpdateLive(def->os.arch, def->cpu, cpu, 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; ret = 0;
cleanup: cleanup:
virCPUDataFree(cpu); virCPUDataFree(cpu);
virCPUDataFree(disabled); virCPUDataFree(disabled);
virCPUDefFree(orig);
return ret; return ret;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册