
On 29.09.2016 16:35, John Ferlan wrote: [...]
--- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1478,13 +1478,17 @@ qemuDomainHelperGetVcpus(virDomainObjPtr vm, virDomainVcpuDefPtr vcpu = virDomainDefGetVcpu(vm->def, i); pid_t vcpupid = qemuDomainGetVcpuPid(vm, i); virVcpuInfoPtr vcpuinfo = info + ncpuinfo; + bool vcpuhalted = qemuDomainGetVcpuHalted(vm, i);
if (!vcpu->online) continue;
if (info) { vcpuinfo->number = i; - vcpuinfo->state = VIR_VCPU_RUNNING; + if (vcpuhalted) + vcpuinfo->state = VIR_VCPU_HALTED;
And this causes the client to see "halted" even though the vcpu may be running, but just not busy.
Also if (vm->def->virtType == VIR_DOMAIN_VIRT_QEMU), then we'll always be halted since qemuDomainRefreshVcpuHalted will avoid the refetch of data.
agree: as discussed in 3/4, wrong default for vcpuhalted
+ else + vcpuinfo->state = VIR_VCPU_RUNNING;
if (qemuGetProcessInfo(&vcpuinfo->cpuTime, &vcpuinfo->cpu, NULL, @@ -5370,6 +5374,7 @@ qemuDomainGetVcpus(virDomainPtr dom, unsigned char *cpumaps, int maplen) {
The opposite end of virDomainGetVcpus a/k/a 'virsh vcpuinfo'
+ virQEMUDriverPtr driver = dom->conn->privateData; virDomainObjPtr vm; int ret = -1;
@@ -5385,6 +5390,13 @@ qemuDomainGetVcpus(virDomainPtr dom, goto cleanup; }
+ if (qemuDomainRefreshVcpuHalted(driver, vm, QEMU_ASYNC_JOB_NONE) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", + _("could not refresh CPU states"));
This overwrites what message qemuDomainRefreshVcpuHalted should have generated. Besides the "%s", could be on the previous line...
yeah, rebase damage (similar to rc = 2) [...] now, the comments are rather easy to incorporate in a V3 of this series, but the main question for me is how to address your concerns about exposing the idleness of x86 vcpus? -- Mit freundlichen Grüßen/Kind Regards Viktor Mihajlovski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martina Köderitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294