On Mon, Aug 13, 2018 at 11:21:05PM +0200, Matthias Bolte wrote: > 2018-08-10 5:56 GMT+02:00 Marcos Paulo de Souza <marcos.souza.org@xxxxxxxxx>: > > Before this change, esxDomainGetMaxVcpus returned -1, which in turn > > fails in libvirt. This commit reimplements esxDomainGetMaxVcpus instead > > of calling esxDomainGetVcpusFlags. The implementation checks for > > capability.maxSupportedVcpus, but as this one can be ommited in ESXi, we > > also check for capability.maxHostSupportedVcpus. With this change, > > virDomainSetVcpus, virDomainGetMaxVcpus and virDomainGetVcpusFlags and > > returning correct values. > > > > Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@xxxxxxxxx> > > --- > > src/esx/esx_driver.c | 36 ++++++++++++++++++++++++++++++++++-- > > 1 file changed, 34 insertions(+), 2 deletions(-) > > > > diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c > > index d5e8a7b4eb..3169314fa4 100644 > > --- a/src/esx/esx_driver.c > > +++ b/src/esx/esx_driver.c > > @@ -2581,8 +2581,40 @@ esxDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags) > > static int > > esxDomainGetMaxVcpus(virDomainPtr domain) > > { > > - return esxDomainGetVcpusFlags(domain, (VIR_DOMAIN_AFFECT_LIVE | > > - VIR_DOMAIN_VCPU_MAXIMUM)); > > + esxPrivate *priv = domain->conn->privateData; > > + esxVI_String *propertyNameList = NULL; > > + esxVI_ObjectContent *hostSystem = NULL; > > + esxVI_Int *supportedVcpus = NULL; > > + esxVI_Int *hostVcpus = NULL; > > + > > + if (esxVI_EnsureSession(priv->primary) < 0) > > + return -1; > > + > > + priv->maxVcpus = -1; > > + > > + if (esxVI_String_AppendValueToList(&propertyNameList, > > + "capability.maxHostSupportedVcpus\0" > > + "capability.maxSupportedVcpus" > > + ) < 0 || > > + esxVI_LookupHostSystemProperties(priv->primary, propertyNameList, > > + &hostSystem) < 0 || > > + esxVI_GetInt(hostSystem, "capability.maxHostSupportedVcpus", > > + &hostVcpus, esxVI_Occurrence_RequiredItem) < 0 || > > + esxVI_GetInt(hostSystem, "capability.maxSupportedVcpus", > > + &supportedVcpus, esxVI_Occurrence_OptionalItem) < 0) > > + > > + goto cleanup; > > + > > + /* as maxSupportedVcpus is optional, check also for maxHostSupportedVcpus */ > > + priv->maxVcpus = supportedVcpus ? supportedVcpus->value : hostVcpus->value; > > + > > + cleanup: > > + esxVI_String_Free(&propertyNameList); > > + esxVI_ObjectContent_Free(&hostSystem); > > + esxVI_Int_Free(&supportedVcpus); > > + esxVI_Int_Free(&hostVcpus); > > + > > + return priv->maxVcpus; > > } > > This is the wrong way to fix the situation. The correct way ist to > make esxDomainGetVcpusFlags handle the VIR_DOMAIN_VCPU_MAXIMUM flag > properly. Thanks for the suggestions, I will send a v2 soon. > > -- > Matthias Bolte > http://photron.blogspot.com -- Thanks, Marcos -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list