[libvirt] [PATCH 4/4] bhyve: host API support
Daniel P. Berrange
berrange at redhat.com
Thu Mar 20 12:05:56 UTC 2014
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 :|
More information about the libvir-list
mailing list