[libvirt] [PATCH 35/66] vbox: Rewrite vboxDomainSetVcpusFlags

Taowei uaedante at gmail.com
Mon Aug 11 10:06:38 UTC 2014


---
 src/vbox/vbox_common.c        |   46 ++++++++++++++++++++++++++++++++++
 src/vbox/vbox_tmpl.c          |   55 -----------------------------------------
 src/vbox/vbox_uniformed_api.h |    3 +++
 3 files changed, 49 insertions(+), 55 deletions(-)

diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index 1a4a4f5..4aadd01 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -2775,3 +2775,49 @@ int vboxDomainGetState(virDomainPtr dom, int *state,
     vboxIIDUnalloc(&domiid);
     return ret;
 }
+
+int vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+                            unsigned int flags)
+{
+    VBOX_OBJECT_CHECK(dom->conn, int, -1);
+    IMachine *machine    = NULL;
+    vboxIIDUnion iid;
+    PRUint32  CPUCount   = nvcpus;
+    nsresult rc;
+
+    if (flags != VIR_DOMAIN_AFFECT_LIVE) {
+        virReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+        return -1;
+    }
+
+    if (openSessionForMachine(data, dom->uuid, &iid, &machine, true) < 0)
+        return -1;
+
+    rc = gVBoxAPI.UISession.Open(data, &iid, machine);
+    if (NS_SUCCEEDED(rc)) {
+        gVBoxAPI.UISession.GetMachine(data->vboxSession, &machine);
+        if (machine) {
+            rc = gVBoxAPI.UIMachine.SetCPUCount(machine, CPUCount);
+            if (NS_SUCCEEDED(rc)) {
+                gVBoxAPI.UIMachine.SaveSettings(machine);
+                ret = 0;
+            } else {
+                virReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("could not set the number of cpus of the domain "
+                                 "to: %u, rc=%08x"),
+                               CPUCount, (unsigned)rc);
+            }
+            VBOX_RELEASE(machine);
+        } else {
+            virReportError(VIR_ERR_NO_DOMAIN,
+                           _("no domain with matching id %d"), dom->id);
+        }
+    } else {
+        virReportError(VIR_ERR_NO_DOMAIN,
+                       _("can't open session to the domain with id %d"), dom->id);
+    }
+    gVBoxAPI.UISession.Close(data->vboxSession);
+
+    vboxIIDUnalloc(&iid);
+    return ret;
+}
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index 33aa66a..c8cc951 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -955,61 +955,6 @@ static virDomainState _vboxConvertState(PRUint32 state)
 }
 
 static int
-vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
-                        unsigned int flags)
-{
-    VBOX_OBJECT_CHECK(dom->conn, int, -1);
-    IMachine *machine    = NULL;
-    vboxIID iid = VBOX_IID_INITIALIZER;
-    PRUint32  CPUCount   = nvcpus;
-    nsresult rc;
-
-    if (flags != VIR_DOMAIN_AFFECT_LIVE) {
-        virReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
-        return -1;
-    }
-
-    vboxIIDFromUUID(&iid, dom->uuid);
-#if VBOX_API_VERSION >= 4000000
-    /* Get machine for the call to VBOX_SESSION_OPEN */
-    rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine);
-    if (NS_FAILED(rc)) {
-        virReportError(VIR_ERR_NO_DOMAIN, "%s",
-                       _("no domain with matching uuid"));
-        return -1;
-    }
-#endif
-
-    rc = VBOX_SESSION_OPEN(iid.value, machine);
-    if (NS_SUCCEEDED(rc)) {
-        data->vboxSession->vtbl->GetMachine(data->vboxSession, &machine);
-        if (machine) {
-            rc = machine->vtbl->SetCPUCount(machine, CPUCount);
-            if (NS_SUCCEEDED(rc)) {
-                machine->vtbl->SaveSettings(machine);
-                ret = 0;
-            } else {
-                virReportError(VIR_ERR_INTERNAL_ERROR,
-                               _("could not set the number of cpus of the domain "
-                                 "to: %u, rc=%08x"),
-                               CPUCount, (unsigned)rc);
-            }
-            VBOX_RELEASE(machine);
-        } else {
-            virReportError(VIR_ERR_NO_DOMAIN,
-                           _("no domain with matching id %d"), dom->id);
-        }
-    } else {
-        virReportError(VIR_ERR_NO_DOMAIN,
-                       _("can't open session to the domain with id %d"), dom->id);
-    }
-    VBOX_SESSION_CLOSE();
-
-    vboxIIDUnalloc(&iid);
-    return ret;
-}
-
-static int
 vboxDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
 {
     return vboxDomainSetVcpusFlags(dom, nvcpus, VIR_DOMAIN_AFFECT_LIVE);
diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h
index 0f6c8ea..84a8a37 100644
--- a/src/vbox/vbox_uniformed_api.h
+++ b/src/vbox/vbox_uniformed_api.h
@@ -438,6 +438,9 @@ int vboxDomainSetMemory(virDomainPtr dom, unsigned long memory);
 int vboxDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info);
 int vboxDomainGetState(virDomainPtr dom, int *state,
                        int *reason, unsigned int flags);
+int vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+                            unsigned int flags);
+
 
 /* Version specified functions for installing uniformed API */
 void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);
-- 
1.7.9.5




More information about the libvir-list mailing list