mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
qemu: Resolve issue with GetScheduler APIs for non running domain
Cherry-picked from b237545341
As a consequence of the cgroup layout changes from commit '632f78ca', the
qemuDomainGetSchedulerParameters[Flags]()' and qemuGetSchedulerType() APIs
failed to return data for a non running domain. This can be seen through
a 'virsh schedinfo <domain>' command which returns:
Scheduler : Unknown
error: Requested operation is not valid: cgroup CPU controller is not mounted
Prior to that change a non running domain would return:
Scheduler : posix
cpu_shares : 0
vcpu_period : 0
vcpu_quota : 0
emulator_period: 0
emulator_quota : 0
This patch will restore the capability to return configuration only data
for a non running domain regardless of whether cgroups are available.
Conflicts:
src/qemu/qemu_driver.c
* Resolved conflict by using former qemuCgroupHasController() rather than
virCgroupHasController()
* Needed to add the code to fetch the 'vm'
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
if (vm == NULL) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("No such domain %s"), dom->uuid);
goto cleanup;
}
* Used 'ret = strdup("posix");' rather than VIR_STRDUP(ret, "posix");
and added the virReportOOMError(); on failure.
This commit is contained in:
parent
5313dd013f
commit
94c88b4837
@ -6734,6 +6734,24 @@ static char *qemuGetSchedulerType(virDomainPtr dom,
|
||||
virQEMUDriverPtr driver = dom->conn->privateData;
|
||||
char *ret = NULL;
|
||||
int rc;
|
||||
virDomainObjPtr vm = NULL;
|
||||
|
||||
vm = virDomainObjListFindByUUID(driver->domains, dom->uuid);
|
||||
if (vm == NULL) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("No such domain %s"), dom->uuid);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* Domain not running, thus no cgroups - return defaults */
|
||||
if (!virDomainObjIsActive(vm)) {
|
||||
if (nparams)
|
||||
*nparams = 5;
|
||||
ret = strdup("posix");
|
||||
if (!ret)
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (!qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID,
|
||||
@ -8227,11 +8245,12 @@ qemuGetSchedulerParametersFlags(virDomainPtr dom,
|
||||
|
||||
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
|
||||
shares = persistentDef->cputune.shares;
|
||||
if (*nparams > 1 && cpu_bw_status) {
|
||||
if (*nparams > 1) {
|
||||
period = persistentDef->cputune.period;
|
||||
quota = persistentDef->cputune.quota;
|
||||
emulator_period = persistentDef->cputune.emulator_period;
|
||||
emulator_quota = persistentDef->cputune.emulator_quota;
|
||||
cpu_bw_status = true; /* Allow copy of data to params[] */
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user