mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-18 05:31:14 +00:00
qemu: Separate CPU updating code from qemuProcessReconnect
The new function is called qemuProcessRefreshCPU. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
e1ca8ecb46
commit
4b87b3675f
@ -6876,6 +6876,49 @@ qemuProcessRefreshDisks(virQEMUDriverPtr driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuProcessRefreshCPU(virQEMUDriverPtr driver,
|
||||||
|
virDomainObjPtr vm)
|
||||||
|
{
|
||||||
|
virCapsPtr caps = virQEMUDriverGetCapabilities(driver, false);
|
||||||
|
virCPUDefPtr host = NULL;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (!caps)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (!virQEMUCapsGuestIsNative(caps->host.arch, vm->def->os.arch) ||
|
||||||
|
!caps->host.cpu ||
|
||||||
|
!vm->def->cpu) {
|
||||||
|
ret = 0;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the domain with a host-model CPU was started by an old libvirt
|
||||||
|
* (< 2.3) which didn't replace the CPU with a custom one, let's do it now
|
||||||
|
* since the rest of our code does not really expect a host-model CPU in a
|
||||||
|
* running domain.
|
||||||
|
*/
|
||||||
|
if (vm->def->cpu->mode == VIR_CPU_MODE_HOST_MODEL) {
|
||||||
|
if (!(host = virCPUCopyMigratable(caps->host.cpu->arch, caps->host.cpu)))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (virCPUUpdate(vm->def->os.arch, vm->def->cpu, host) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (qemuProcessUpdateCPU(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
virCPUDefFree(host);
|
||||||
|
virObjectUnref(caps);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct qemuProcessReconnectData {
|
struct qemuProcessReconnectData {
|
||||||
virConnectPtr conn;
|
virConnectPtr conn;
|
||||||
virQEMUDriverPtr driver;
|
virQEMUDriverPtr driver;
|
||||||
@ -7042,30 +7085,9 @@ qemuProcessReconnect(void *opaque)
|
|||||||
ignore_value(qemuSecurityCheckAllLabel(driver->securityManager,
|
ignore_value(qemuSecurityCheckAllLabel(driver->securityManager,
|
||||||
obj->def));
|
obj->def));
|
||||||
|
|
||||||
/* If the domain with a host-model CPU was started by an old libvirt
|
if (qemuProcessRefreshCPU(driver, obj) < 0)
|
||||||
* (< 2.3) which didn't replace the CPU with a custom one, let's do it now
|
|
||||||
* since the rest of our code does not really expect a host-model CPU in a
|
|
||||||
* running domain.
|
|
||||||
*/
|
|
||||||
if (virQEMUCapsGuestIsNative(caps->host.arch, obj->def->os.arch) &&
|
|
||||||
caps->host.cpu &&
|
|
||||||
obj->def->cpu &&
|
|
||||||
obj->def->cpu->mode == VIR_CPU_MODE_HOST_MODEL) {
|
|
||||||
virCPUDefPtr host;
|
|
||||||
|
|
||||||
if (!(host = virCPUCopyMigratable(caps->host.cpu->arch, caps->host.cpu)))
|
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (virCPUUpdate(obj->def->os.arch, obj->def->cpu, host) < 0) {
|
|
||||||
virCPUDefFree(host);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
virCPUDefFree(host);
|
|
||||||
|
|
||||||
if (qemuProcessUpdateCPU(driver, obj, QEMU_ASYNC_JOB_NONE) < 0)
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qemuDomainRefreshVcpuInfo(driver, obj, QEMU_ASYNC_JOB_NONE, true) < 0)
|
if (qemuDomainRefreshVcpuInfo(driver, obj, QEMU_ASYNC_JOB_NONE, true) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user