On Thu, Mar 20, 2014 at 09:39:23AM +0100, Wojciech Macek wrote: > New functionalities: > - connectGetMaxVcpus - on bhyve hardcode this value to 16 > - nodeGetFreeMemory - do not use physmem_get on FreeBSD, since > it might get wrong value on systems with > more than 100GB of RAM > - nodeGetCPUMap - wrapper only for mapping function, currently not > supported by FreeBSD > - nodeSet/GetMemoryParameters - wrapper only for future improvements, > currently not supported by FreeBSD > --- > src/bhyve/bhyve_driver.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ > src/nodeinfo.c | 19 ++++++++++++++ > 2 files changed, 85 insertions(+) > > diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c > index baa3340..2e6a8cb 100644 > --- a/src/bhyve/bhyve_driver.c > +++ b/src/bhyve/bhyve_driver.c > @@ -694,6 +694,67 @@ cleanup: > return -1; > } > > +static int > +bhyveConnectGetMaxVcpus(virConnectPtr conn ATTRIBUTE_UNUSED, > + const char *type) { Mis-aligned indent > + if (virConnectGetMaxVcpusEnsureACL(conn) < 0) > + return -1; > + > + /* > + * Bhyve supports up to 16 VCPUs, but offers no method to check this > + * value. Hardcode 16... > + */ > + if (!type || STRCASEEQ(type, "bhyve")) > + return 16; > + > + virReportError(VIR_ERR_INVALID_ARG, _("unknown type '%s'"), type); > + return -1; > +} > + > +static unsigned long long > +bhyveNodeGetFreeMemory(virConnectPtr conn) > +{ > + if (virNodeGetFreeMemoryEnsureACL(conn) < 0) > + return 0; > + > + return nodeGetFreeMemory(); > +} > + > +static int > +bhyveNodeGetCPUMap(virConnectPtr conn, > + unsigned char **cpumap, > + unsigned int *online, > + unsigned int flags) miss-aligned indent > +{ > + if (virNodeGetCPUMapEnsureACL(conn) < 0) > + return -1; > + > + return nodeGetCPUMap(cpumap, online, flags); > +} > + > +static int > +bhyveNodeGetMemoryParameters(virConnectPtr conn, > + virTypedParameterPtr params, > + int *nparams, > + unsigned int flags) miss-aligned indent > +{ > + if (virNodeGetMemoryParametersEnsureACL(conn) < 0) > + return -1; > + > + return nodeGetMemoryParameters(params, nparams, flags); > +} > + > +static int > +bhyveNodeSetMemoryParameters(virConnectPtr conn, > + virTypedParameterPtr params, > + int nparams, > + unsigned int flags) miss-aligned indent > +{ > + if (virNodeSetMemoryParametersEnsureACL(conn) < 0) > + return -1; > + > + return nodeSetMemoryParameters(params, nparams, flags); > +} > > static virDriver bhyveDriver = { > .no = VIR_DRV_BHYVE, > @@ -722,6 +783,11 @@ static virDriver bhyveDriver = { > .nodeGetCPUStats = bhyveNodeGetCPUStats, /* 1.2.2 */ > .nodeGetMemoryStats = bhyveNodeGetMemoryStats, /* 1.2.2 */ > .nodeGetInfo = bhyveNodeGetInfo, /* 1.2.3 */ > + .connectGetMaxVcpus = bhyveConnectGetMaxVcpus, /* 1.2.3 */ > + .nodeGetFreeMemory = bhyveNodeGetFreeMemory, /* 1.2.3 */ > + .nodeGetCPUMap = bhyveNodeGetCPUMap, /* 1.2.3 */ > + .nodeGetMemoryParameters = bhyveNodeGetMemoryParameters, /* 1.2.3 */ > + .nodeSetMemoryParameters = bhyveNodeSetMemoryParameters, /* 1.2.3 */ > }; > > > diff --git a/src/nodeinfo.c b/src/nodeinfo.c > index 6d33f64..7996d55 100644 > --- a/src/nodeinfo.c > +++ b/src/nodeinfo.c > @@ -1699,6 +1699,24 @@ nodeGetCellsFreeMemoryFake(unsigned long long *freeMems, > static unsigned long long > nodeGetFreeMemoryFake(void) > { > +#if defined(__FreeBSD__) > + unsigned long pagesize = getpagesize(); > + u_int value; > + size_t value_size = sizeof(value); > + unsigned long long freemem; > + > + if (sysctlbyname("vm.stats.vm.v_free_count", &value, > + &value_size, NULL, 0) < 0) { > + virReportSystemError(errno, "%s", > + _("sysctl failed for vm.stats.vm.v_free_count")); > + return 0; > + } > + > + freemem = value; > + freemem = freemem * (unsigned long long)pagesize; Huh, why not just do it on 1 line freemem = value * (unsigned long long)pagesize; > + > + return freemem; > +#else > double avail = physmem_available(); > unsigned long long ret; > > @@ -1709,6 +1727,7 @@ nodeGetFreeMemoryFake(void) > } > > return ret; > +#endif > } ACK if the nitpicks are fixed. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list