From 4bc97d592fdbc925ae2dd60240c1c63400db596a Mon Sep 17 00:00:00 2001 From: Dmitry Guryanov Date: Mon, 10 Sep 2012 19:22:43 +0400 Subject: [PATCH] parallels: handle unlimited cpus on containers User may set "unlimited" cpus for containers, which means to take all available cpus on the node. Signed-off-by: Dmitry Guryanov --- src/parallels/parallels_driver.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c index 0538a1efb9..60323cca98 100644 --- a/src/parallels/parallels_driver.c +++ b/src/parallels/parallels_driver.c @@ -468,12 +468,29 @@ parallelsLoadDomain(parallelsConnPtr privconn, virJSONValuePtr jobj) goto cleanup; } - if (virJSONValueObjectGetNumberUint(jobj3, "cpus", &x) < 0) { + if (virJSONValueObjectGetNumberUint(jobj3, "cpus", &x) == 0) { + def->vcpus = x; + def->maxvcpus = x; + } else if ((tmp = virJSONValueObjectGetString(jobj3, "cpus"))) { + if (STREQ(tmp, "unlimited")) { + virNodeInfo nodeinfo; + + if (nodeGetInfo(NULL, &nodeinfo) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Can't get node info")); + goto cleanup; + } + + def->vcpus = nodeinfo.cpus; + def->maxvcpus = def->vcpus; + } else { + parallelsParseError(); + goto cleanup; + } + } else { parallelsParseError(); goto cleanup; } - def->vcpus = x; - def->maxvcpus = x; if (!(jobj3 = virJSONValueObjectGet(jobj2, "memory"))) { parallelsParseError(); -- GitLab