提交 041f3534 编写于 作者: P Peter Krempa

qemu: domain: Simplify return values of qemuDomainRefreshVcpuInfo

Call the vcpu thread info validation separately to decrease complexity
of returned values by qemuDomainRefreshVcpuInfo.

This function now returns 0 on success and -1 on error. Certain
failures of qemu to report data are still considered as success. Any
error reported now is fatal.
上级 2bdc300a
......@@ -5671,10 +5671,10 @@ qemuDomainValidateVcpuInfo(virDomainObjPtr vm)
* @vm: domain object
* @asyncJob: current asynchronous job type
*
* Updates vCPU information private data of @vm.
* Updates vCPU information private data of @vm. Due to historical reasons this
* function returns success even if some data were not reported by qemu.
*
* Returns number of detected vCPU threads on success, -1 on error and reports
* an appropriate error, -2 if the domain doesn't exist any more.
* Returns 0 on success and -1 on fatal error.
*/
int
qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver,
......@@ -5722,10 +5722,8 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver,
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
return -1;
ncpupids = qemuMonitorGetCPUInfo(qemuDomainGetMonitor(vm), &cpupids);
if (qemuDomainObjExitMonitor(driver, vm) < 0) {
ret = -2;
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
}
/* failure to get the VCPU <-> PID mapping or to execute the query
* command will not be treated fatal as some versions of qemu don't
......@@ -5745,10 +5743,7 @@ qemuDomainRefreshVcpuInfo(virQEMUDriverPtr driver,
QEMU_DOMAIN_VCPU_PRIVATE(vcpu)->tid = 0;
}
if (qemuDomainValidateVcpuInfo(vm) < 0)
goto cleanup;
ret = ncpupids;
ret = 0;
cleanup:
VIR_FREE(cpupids);
......
......@@ -4615,6 +4615,7 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver,
{
qemuDomainObjPrivatePtr priv = vm->privateData;
virDomainVcpuDefPtr vcpuinfo = virDomainDefGetVcpu(vm->def, vcpu);
qemuDomainVcpuPrivatePtr vcpupriv = QEMU_DOMAIN_VCPU_PRIVATE(vcpuinfo);
int ret = -1;
int rc;
int oldvcpus = virDomainDefGetVcpus(vm->def);
......@@ -4639,15 +4640,14 @@ qemuDomainHotplugAddVcpu(virQEMUDriverPtr driver,
vcpuinfo->online = true;
if ((rc = qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE)) <= 0) {
/* vcpu pids were not detected, skip setting of affinity */
if (rc == 0)
ret = 0;
if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
goto cleanup;
if (qemuDomainValidateVcpuInfo(vm) < 0)
goto cleanup;
}
if (qemuProcessSetupVcpu(vm, vcpu) < 0)
if (vcpupriv->tid > 0 &&
qemuProcessSetupVcpu(vm, vcpu) < 0)
goto cleanup;
ret = 0;
......@@ -4689,11 +4689,11 @@ qemuDomainHotplugDelVcpu(virQEMUDriverPtr driver,
goto cleanup;
}
if ((rc = qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE)) < 0) {
/* rollback only if domain didn't exit */
if (rc == -2)
goto cleanup;
if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
goto cleanup;
if (qemuDomainValidateVcpuInfo(vm) < 0) {
/* rollback vcpu count if the setting has failed */
virDomainAuditVcpu(vm, oldvcpus, oldvcpus - 1, "update", false);
vcpuinfo->online = true;
goto cleanup;
......
......@@ -5193,6 +5193,9 @@ qemuProcessLaunch(virConnectPtr conn,
if (qemuDomainRefreshVcpuInfo(driver, vm, asyncJob) < 0)
goto cleanup;
if (qemuDomainValidateVcpuInfo(vm) < 0)
goto cleanup;
VIR_DEBUG("Detecting IOThread PIDs");
if (qemuProcessDetectIOThreadPIDs(driver, vm, asyncJob) < 0)
goto cleanup;
......@@ -5985,6 +5988,9 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
if (qemuDomainRefreshVcpuInfo(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
goto error;
if (qemuDomainValidateVcpuInfo(vm) < 0)
goto error;
VIR_DEBUG("Detecting IOThread PIDs");
if (qemuProcessDetectIOThreadPIDs(driver, vm, QEMU_ASYNC_JOB_NONE) < 0)
goto error;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册