]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
parallels: handle unlimited cpus on containers
authorDmitry Guryanov <dguryanov@parallels.com>
Mon, 10 Sep 2012 15:22:43 +0000 (19:22 +0400)
committerDaniel Veillard <veillard@redhat.com>
Thu, 13 Sep 2012 13:19:57 +0000 (21:19 +0800)
User may set "unlimited" cpus for containers, which means to
take all available cpus on the node.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
src/parallels/parallels_driver.c

index 0538a1efb9d46b8993ce0fcd7ae887f0426b5235..60323cca9847cae72573f9fd6efc4d3fdbd5a855 100644 (file)
@@ -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();