A bit of context would be nice
On Fri, Aug 31, 2012 at 08:23:15AM +0200, Jiri Denemark wrote:
---
src/qemu/qemu_cgroup.c | 29 ++++++++++++++++++++---------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index df67ff3..7298e28 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -546,16 +546,21 @@ int qemuSetupCgroupForVcpu(struct qemud_driver *driver,
virDomainObjPtr vm)
unsigned long long period = vm->def->cputune.period;
long long quota = vm->def->cputune.quota;
- if (driver->cgroup == NULL)
- return 0; /* Not supported, so claim success */
-
if ((period || quota) &&
- !qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU)) {
- virReportError(VIR_ERR_SYSTEM_ERROR, "%s",
- _("cgroup cpu is not active"));
+ (!driver->cgroup ||
+ !qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU))) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("cgroup cpu is required for scheduler tuning"));
return -1;
}
+ /* We are trying to setup cgroups for CPU pinning, which can also be done
+ * with virProcessInfoSetAffinity, thus the lack of cgroups is not fatal
+ * here.
+ */
+ if (driver->cgroup == NULL)
+ return 0;
+
rc = virCgroupForDomain(driver->cgroup, vm->def->name, &cgroup, 0);
if (rc != 0) {
virReportSystemError(-rc,
@@ -636,6 +641,14 @@ int qemuSetupCgroupForEmulator(struct qemud_driver *driver,
long long quota = vm->def->cputune.emulator_quota;
int rc, i;
+ if ((period || quota) &&
+ (!driver->cgroup ||
+ !qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU))) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("cgroup cpu is required for scheduler tuning"));
+ return -1;
+ }
+
if (driver->cgroup == NULL)
return 0; /* Not supported, so claim success */
@@ -656,10 +669,8 @@ int qemuSetupCgroupForEmulator(struct qemud_driver *driver,
}
for (i = 0; i < VIR_CGROUP_CONTROLLER_LAST; i++) {
- if (!qemuCgroupControllerActive(driver, i)) {
- VIR_WARN("cgroup %d is not active", i);
+ if (!qemuCgroupControllerActive(driver, i))
continue;
- }
rc = virCgroupMoveTask(cgroup, cgroup_emulator, i);
if (rc < 0) {
virReportSystemError(-rc,
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/