From da3b862aadd1c2fa51cd24ce7e8a30e515789eb9 Mon Sep 17 00:00:00 2001 From: Taowei Date: Mon, 11 Aug 2014 18:06:38 +0800 Subject: [PATCH] vbox: Rewrite vboxDomainSetVcpusFlags --- 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 5240fc3061..7ccfba0495 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 e9dd78d72a..7766d906b7 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) { diff --git a/src/vbox/vbox_uniformed_api.h b/src/vbox/vbox_uniformed_api.h index 0f6c8eadc4..84a8a37506 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); -- GitLab