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.
NOTE: Needed to change the VIR_STRDUP(ret, "posix"); to ret =
strdup("posix");
---
src/qemu/qemu_driver.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 31b2f85..09963b4 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6619,6 +6619,14 @@ static char *qemuDomainGetSchedulerType(virDomainPtr dom,
}
priv = vm->privateData;
+ /* Domain not running, thus no cgroups - return defaults */
+ if (!virDomainObjIsActive(vm)) {
+ if (nparams)
+ *nparams = 5;
+ ret = strdup("posix");
+ goto cleanup;
+ }
+
if (!virCgroupHasController(priv->cgroup, VIR_CGROUP_CONTROLLER_CPU)) {
virReportError(VIR_ERR_OPERATION_INVALID,
"%s", _("cgroup CPU controller is not
mounted"));
@@ -8038,11 +8046,12 @@ qemuDomainGetSchedulerParametersFlags(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;
}
--
1.8.1.4