mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
Support for getting/setting number of cpus in VBox
* src/vbox/vbox_tmpl.c: adds support for getting/setting number of cpus
This commit is contained in:
parent
575b18c0f0
commit
fea5a0bdc9
@ -1527,6 +1527,82 @@ cleanup:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vboxDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
|
||||||
|
nsresult rc;
|
||||||
|
vboxGlobalData *data = dom->conn->privateData;
|
||||||
|
IMachine *machine = NULL;
|
||||||
|
vboxIID *iid = NULL;
|
||||||
|
PRUint32 CPUCount = nvcpus;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
#if VBOX_API_VERSION == 2002
|
||||||
|
if (VIR_ALLOC(iid) < 0) {
|
||||||
|
virReportOOMError(dom->conn);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(data->vboxObj) {
|
||||||
|
|
||||||
|
vboxIIDFromUUID(dom->uuid, iid);
|
||||||
|
|
||||||
|
rc = data->vboxObj->vtbl->OpenSession(data->vboxObj, data->vboxSession, iid);
|
||||||
|
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 {
|
||||||
|
vboxError(dom->conn, VIR_ERR_INTERNAL_ERROR, "%s: %u, rc=%08x",
|
||||||
|
"could not set the number of cpus of the domain to",
|
||||||
|
CPUCount, (unsigned)rc);
|
||||||
|
}
|
||||||
|
machine->vtbl->nsisupports.Release((nsISupports *)machine);
|
||||||
|
} else {
|
||||||
|
vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN,
|
||||||
|
"no domain with matching id %d", dom->id);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vboxError(dom->conn, VIR_ERR_INVALID_DOMAIN,
|
||||||
|
"can't open session to the domain with id %d", dom->id);
|
||||||
|
}
|
||||||
|
data->vboxSession->vtbl->Close(data->vboxSession);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if VBOX_API_VERSION == 2002
|
||||||
|
cleanup:
|
||||||
|
#endif
|
||||||
|
vboxIIDFree(iid);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int vboxDomainGetMaxVcpus(virDomainPtr dom) {
|
||||||
|
vboxGlobalData *data = dom->conn->privateData;
|
||||||
|
PRUint32 maxCPUCount = 0;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
/* Currently every domain supports the same number of max cpus
|
||||||
|
* as that supported by vbox and thus take it directly from
|
||||||
|
* the systemproperties.
|
||||||
|
*/
|
||||||
|
if(data->vboxObj) {
|
||||||
|
ISystemProperties *systemProperties = NULL;
|
||||||
|
|
||||||
|
data->vboxObj->vtbl->GetSystemProperties(data->vboxObj, &systemProperties);
|
||||||
|
if (systemProperties) {
|
||||||
|
systemProperties->vtbl->GetMaxGuestCPUCount(systemProperties, &maxCPUCount);
|
||||||
|
systemProperties->vtbl->nsisupports.Release((nsISupports *)systemProperties);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxCPUCount > 0)
|
||||||
|
ret = maxCPUCount;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
|
static char *vboxDomainDumpXML(virDomainPtr dom, int flags) {
|
||||||
nsresult rc;
|
nsresult rc;
|
||||||
vboxGlobalData *data = dom->conn->privateData;
|
vboxGlobalData *data = dom->conn->privateData;
|
||||||
@ -5579,10 +5655,10 @@ virDriver NAME(Driver) = {
|
|||||||
vboxDomainSave, /* domainSave */
|
vboxDomainSave, /* domainSave */
|
||||||
NULL, /* domainRestore */
|
NULL, /* domainRestore */
|
||||||
NULL, /* domainCoreDump */
|
NULL, /* domainCoreDump */
|
||||||
NULL, /* domainSetVcpus */
|
vboxDomainSetVcpus, /* domainSetVcpus */
|
||||||
NULL, /* domainPinVcpu */
|
NULL, /* domainPinVcpu */
|
||||||
NULL, /* domainGetVcpus */
|
NULL, /* domainGetVcpus */
|
||||||
NULL, /* domainGetMaxVcpus */
|
vboxDomainGetMaxVcpus, /* domainGetMaxVcpus */
|
||||||
NULL, /* domainGetSecurityLabel */
|
NULL, /* domainGetSecurityLabel */
|
||||||
NULL, /* nodeGetSecurityModel */
|
NULL, /* nodeGetSecurityModel */
|
||||||
vboxDomainDumpXML, /* domainDumpXML */
|
vboxDomainDumpXML, /* domainDumpXML */
|
||||||
|
Loading…
Reference in New Issue
Block a user