src/node_device/node_device_driver.c
src/node_device/node_device_hal.c
src/node_device/node_device_udev.c
-src/nodeinfo.c
src/nwfilter/nwfilter_dhcpsnoop.c
src/nwfilter/nwfilter_driver.c
src/nwfilter/nwfilter_ebiptables_driver.c
<$(srcdir)/util/keymaps.csv >util/virkeymaps.h
# Internal generic driver infrastructure
-NODE_INFO_SOURCES = nodeinfo.h nodeinfo.c
DATATYPES_SOURCES = datatypes.h datatypes.c
DRIVER_SOURCES = \
driver.c driver.h \
driver-stream.h \
internal.h \
$(DATATYPES_SOURCES) \
- $(NODE_INFO_SOURCES) \
libvirt.c libvirt_internal.h \
libvirt-domain.c \
libvirt-domain-snapshot.c \
libvirt_lxc_SOURCES = \
$(LXC_CONTROLLER_SOURCES) \
- $(NODE_INFO_SOURCES) \
$(DATATYPES_SOURCES)
libvirt_lxc_LDFLAGS = \
$(AM_LDFLAGS) \
#include "virlog.h"
#include "virstring.h"
#include "cpu/cpu.h"
-#include "nodeinfo.h"
#include "domain_conf.h"
#include "vircommand.h"
#include "bhyve_capabilities.h"
#include "virstring.h"
#include "cpu/cpu.h"
#include "viraccessapicheck.h"
-#include "nodeinfo.h"
#include "virhostcpu.h"
#include "virhostmem.h"
#include "conf/domain_capabilities.h"
static int
bhyveNodeGetInfo(virConnectPtr conn,
- virNodeInfoPtr nodeinfo)
+ virNodeInfoPtr nodeinfo)
{
if (virNodeGetInfoEnsureACL(conn) < 0)
return -1;
- return nodeGetInfo(nodeinfo);
+ return virCapabilitiesGetNodeInfo(nodeinfo);
}
static int
#include <config.h>
+#include <stdio.h>
+#include <string.h>
#include <strings.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
#include "capabilities.h"
-#include "virbuffer.h"
-#include "viralloc.h"
-#include "viruuid.h"
+#include "count-one-bits.h"
#include "cpu_conf.h"
+#include "domain_conf.h"
+#include "physmem.h"
+#include "viralloc.h"
+#include "virarch.h"
+#include "virbuffer.h"
#include "virerror.h"
+#include "virfile.h"
+#include "virhostcpu.h"
+#include "virhostmem.h"
+#include "virlog.h"
+#include "virnuma.h"
#include "virstring.h"
-#include "domain_conf.h"
+#include "virsysfs.h"
+#include "virtypedparam.h"
+#include "viruuid.h"
#define VIR_FROM_THIS VIR_FROM_CAPABILITIES
+VIR_LOG_INIT("conf.capabilities")
+
VIR_ENUM_DECL(virCapsHostPMTarget)
VIR_ENUM_IMPL(virCapsHostPMTarget, VIR_NODE_SUSPEND_TARGET_LAST,
"suspend_mem", "suspend_disk", "suspend_hybrid");
return ret;
}
+
+
+int
+virCapabilitiesGetNodeInfo(virNodeInfoPtr nodeinfo)
+{
+ virArch hostarch = virArchFromHost();
+ unsigned long long memorybytes;
+
+ memset(nodeinfo, 0, sizeof(*nodeinfo));
+
+ if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL)
+ return -1;
+
+ if (virHostMemGetInfo(&memorybytes, NULL) < 0)
+ return -1;
+ nodeinfo->memory = memorybytes / 1024;
+
+ if (virHostCPUGetInfo(hostarch,
+ &nodeinfo->cpus, &nodeinfo->mhz,
+ &nodeinfo->nodes, &nodeinfo->sockets,
+ &nodeinfo->cores, &nodeinfo->threads) < 0)
+ return -1;
+
+ return 0;
+}
+
+/* returns 1 on success, 0 if the detection failed and -1 on hard error */
+static int
+virCapabilitiesFillCPUInfo(int cpu_id ATTRIBUTE_UNUSED,
+ virCapsHostNUMACellCPUPtr cpu ATTRIBUTE_UNUSED)
+{
+#ifdef __linux__
+ cpu->id = cpu_id;
+
+ if (virHostCPUGetSocket(cpu_id, &cpu->socket_id) < 0 ||
+ virHostCPUGetCore(cpu_id, &cpu->core_id) < 0)
+ return -1;
+
+ if (!(cpu->siblings = virHostCPUGetSiblingsList(cpu_id)))
+ return -1;
+
+ return 0;
+#else
+ virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ _("node cpu info not implemented on this platform"));
+ return -1;
+#endif
+}
+
+static int
+virCapabilitiesGetNUMASiblingInfo(int node,
+ virCapsHostNUMACellSiblingInfoPtr *siblings,
+ int *nsiblings)
+{
+ virCapsHostNUMACellSiblingInfoPtr tmp = NULL;
+ int tmp_size = 0;
+ int ret = -1;
+ int *distances = NULL;
+ int ndistances = 0;
+ size_t i;
+
+ if (virNumaGetDistances(node, &distances, &ndistances) < 0)
+ goto cleanup;
+
+ if (!distances) {
+ *siblings = NULL;
+ *nsiblings = 0;
+ return 0;
+ }
+
+ if (VIR_ALLOC_N(tmp, ndistances) < 0)
+ goto cleanup;
+
+ for (i = 0; i < ndistances; i++) {
+ if (!distances[i])
+ continue;
+
+ tmp[tmp_size].node = i;
+ tmp[tmp_size].distance = distances[i];
+ tmp_size++;
+ }
+
+ if (VIR_REALLOC_N(tmp, tmp_size) < 0)
+ goto cleanup;
+
+ *siblings = tmp;
+ *nsiblings = tmp_size;
+ tmp = NULL;
+ tmp_size = 0;
+ ret = 0;
+ cleanup:
+ VIR_FREE(distances);
+ VIR_FREE(tmp);
+ return ret;
+}
+
+static int
+virCapabilitiesGetNUMAPagesInfo(int node,
+ virCapsHostNUMACellPageInfoPtr *pageinfo,
+ int *npageinfo)
+{
+ int ret = -1;
+ unsigned int *pages_size = NULL, *pages_avail = NULL;
+ size_t npages, i;
+
+ if (virNumaGetPages(node, &pages_size, &pages_avail, NULL, &npages) < 0)
+ goto cleanup;
+
+ if (VIR_ALLOC_N(*pageinfo, npages) < 0)
+ goto cleanup;
+ *npageinfo = npages;
+
+ for (i = 0; i < npages; i++) {
+ (*pageinfo)[i].size = pages_size[i];
+ (*pageinfo)[i].avail = pages_avail[i];
+ }
+
+ ret = 0;
+
+ cleanup:
+ VIR_FREE(pages_avail);
+ VIR_FREE(pages_size);
+ return ret;
+}
+
+
+static int
+virCapabilitiesInitNUMAFake(virCapsPtr caps)
+{
+ virNodeInfo nodeinfo;
+ virCapsHostNUMACellCPUPtr cpus;
+ int ncpus;
+ int s, c, t;
+ int id, cid;
+ int onlinecpus ATTRIBUTE_UNUSED;
+ bool tmp;
+
+ if (virCapabilitiesGetNodeInfo(&nodeinfo) < 0)
+ return -1;
+
+ ncpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
+ onlinecpus = nodeinfo.cpus;
+
+ if (VIR_ALLOC_N(cpus, ncpus) < 0)
+ return -1;
+
+ id = cid = 0;
+ for (s = 0; s < nodeinfo.sockets; s++) {
+ for (c = 0; c < nodeinfo.cores; c++) {
+ for (t = 0; t < nodeinfo.threads; t++) {
+ if (virHostCPUGetOnline(id, &tmp) < 0)
+ goto error;
+ if (tmp) {
+ cpus[cid].id = id;
+ cpus[cid].socket_id = s;
+ cpus[cid].core_id = c;
+ if (!(cpus[cid].siblings = virBitmapNew(ncpus)))
+ goto error;
+ ignore_value(virBitmapSetBit(cpus[cid].siblings, id));
+ cid++;
+ }
+
+ id++;
+ }
+ }
+ }
+
+ if (virCapabilitiesAddHostNUMACell(caps, 0,
+ nodeinfo.memory,
+#ifdef __linux__
+ onlinecpus, cpus,
+#else
+ ncpus, cpus,
+#endif
+ 0, NULL,
+ 0, NULL) < 0)
+ goto error;
+
+ return 0;
+
+ error:
+ for (; id >= 0; id--)
+ virBitmapFree(cpus[id].siblings);
+ VIR_FREE(cpus);
+ return -1;
+}
+
+int
+virCapabilitiesInitNUMA(virCapsPtr caps)
+{
+ int n;
+ unsigned long long memory;
+ virCapsHostNUMACellCPUPtr cpus = NULL;
+ virBitmapPtr cpumap = NULL;
+ virCapsHostNUMACellSiblingInfoPtr siblings = NULL;
+ int nsiblings = 0;
+ virCapsHostNUMACellPageInfoPtr pageinfo = NULL;
+ int npageinfo;
+ int ret = -1;
+ int ncpus = 0;
+ int cpu;
+ bool topology_failed = false;
+ int max_node;
+
+ if (!virNumaIsAvailable())
+ return virCapabilitiesInitNUMAFake(caps);
+
+ if ((max_node = virNumaGetMaxNode()) < 0)
+ goto cleanup;
+
+ for (n = 0; n <= max_node; n++) {
+ size_t i;
+
+ if ((ncpus = virNumaGetNodeCPUs(n, &cpumap)) < 0) {
+ if (ncpus == -2)
+ continue;
+
+ goto cleanup;
+ }
+
+ if (VIR_ALLOC_N(cpus, ncpus) < 0)
+ goto cleanup;
+ cpu = 0;
+
+ for (i = 0; i < virBitmapSize(cpumap); i++) {
+ if (virBitmapIsBitSet(cpumap, i)) {
+ if (virCapabilitiesFillCPUInfo(i, cpus + cpu++) < 0) {
+ topology_failed = true;
+ virResetLastError();
+ }
+ }
+ }
+
+ if (virCapabilitiesGetNUMASiblingInfo(n, &siblings, &nsiblings) < 0)
+ goto cleanup;
+
+ if (virCapabilitiesGetNUMAPagesInfo(n, &pageinfo, &npageinfo) < 0)
+ goto cleanup;
+
+ /* Detect the amount of memory in the numa cell in KiB */
+ virNumaGetNodeMemory(n, &memory, NULL);
+ memory >>= 10;
+
+ if (virCapabilitiesAddHostNUMACell(caps, n, memory,
+ ncpus, cpus,
+ nsiblings, siblings,
+ npageinfo, pageinfo) < 0)
+ goto cleanup;
+
+ cpus = NULL;
+ siblings = NULL;
+ pageinfo = NULL;
+ virBitmapFree(cpumap);
+ cpumap = NULL;
+ }
+
+ ret = 0;
+
+ cleanup:
+ if ((topology_failed || ret < 0) && cpus)
+ virCapabilitiesClearHostNUMACellCPUTopology(cpus, ncpus);
+
+ virBitmapFree(cpumap);
+ VIR_FREE(cpus);
+ VIR_FREE(siblings);
+ VIR_FREE(pageinfo);
+ return ret;
+}
virBitmapPtr virCapabilitiesGetCpusForNodemask(virCapsPtr caps,
virBitmapPtr nodemask);
+int virCapabilitiesGetNodeInfo(virNodeInfoPtr nodeinfo);
+
+int virCapabilitiesInitNUMA(virCapsPtr caps);
+
#endif /* __VIR_CAPABILITIES_H */
#include "virlog.h"
#include "viralloc.h"
#include "virxml.h"
-#include "nodeinfo.h"
#include "cpu.h"
#include "cpu_map.h"
#include "cpu_x86.h"
#include "cpu_ppc64.h"
#include "cpu_s390.h"
#include "cpu_arm.h"
+#include "capabilities.h"
#include "virstring.h"
{
virNodeInfo nodeinfo;
- if (nodeGetInfo(&nodeinfo))
+ if (virCapabilitiesGetNodeInfo(&nodeinfo))
return NULL;
return virCPUGetHost(arch, VIR_CPU_TYPE_HOST, &nodeinfo, NULL, 0);
virCapabilitiesFreeMachines;
virCapabilitiesFreeNUMAInfo;
virCapabilitiesGetCpusForNodemask;
+virCapabilitiesGetNodeInfo;
virCapabilitiesHostSecModelAddBaseLabel;
+virCapabilitiesInitNUMA;
virCapabilitiesNew;
virCapabilitiesSetHostCPU;
virCapabilitiesSetNetPrefix;
virLogManagerNew;
-# nodeinfo.h
-nodeCapsInitNUMA;
-nodeGetInfo;
-
-
# secret/secret_util.h
virSecretGetSecretString;
#include "lxc_conf.h"
#include "lxc_domain.h"
-#include "nodeinfo.h"
#include "virerror.h"
#include "virconf.h"
#include "viralloc.h"
* unexpected failures. We don't want to break the lxc
* driver in this scenario, so log errors & carry on
*/
- if (nodeCapsInitNUMA(caps) < 0) {
+ if (virCapabilitiesInitNUMA(caps) < 0) {
virCapabilitiesFreeNUMAInfo(caps);
VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities");
}
#include "virnetdevbridge.h"
#include "virnetdevveth.h"
#include "virnetdevopenvswitch.h"
-#include "nodeinfo.h"
#include "virhostcpu.h"
#include "virhostmem.h"
#include "viruuid.h"
if (virNodeGetInfoEnsureACL(conn) < 0)
return -1;
- return nodeGetInfo(nodeinfo);
+ return virCapabilitiesGetNodeInfo(nodeinfo);
}
+++ /dev/null
-/*
- * nodeinfo.c: Helper routines for OS specific node information
- *
- * Copyright (C) 2006-2008, 2010-2015 Red Hat, Inc.
- * Copyright (C) 2006 Daniel P. Berrange
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- * Author: Daniel P. Berrange <berrange@redhat.com>
- */
-
-#include <config.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <errno.h>
-#include <sys/utsname.h>
-#include "conf/domain_conf.h"
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-
-#include "viralloc.h"
-#include "nodeinfo.h"
-#include "virhostcpu.h"
-#include "virhostmem.h"
-#include "physmem.h"
-#include "virerror.h"
-#include "count-one-bits.h"
-#include "intprops.h"
-#include "virarch.h"
-#include "virfile.h"
-#include "virtypedparam.h"
-#include "virstring.h"
-#include "virnuma.h"
-#include "virlog.h"
-
-#define VIR_FROM_THIS VIR_FROM_NONE
-
-VIR_LOG_INIT("nodeinfo");
-
-
-
-#ifdef __linux__
-# define SYSFS_SYSTEM_PATH "/sys/devices/system"
-# define SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX 8192
-
-
-/* Return the positive decimal contents of the given
- * DIR/cpu%u/FILE, or -1 on error. If DEFAULT_VALUE is non-negative
- * and the file could not be found, return that instead of an error;
- * this is useful for machines that cannot hot-unplug cpu0, or where
- * hot-unplugging is disabled, or where the kernel is too old
- * to support NUMA cells, etc. */
-static int
-virNodeGetCpuValue(const char *dir, unsigned int cpu, const char *file,
- int default_value)
-{
- char *path;
- FILE *pathfp;
- int value = -1;
- char value_str[INT_BUFSIZE_BOUND(value)];
- char *tmp;
-
- if (virAsprintf(&path, "%s/cpu%u/%s", dir, cpu, file) < 0)
- return -1;
-
- pathfp = fopen(path, "r");
- if (pathfp == NULL) {
- if (default_value >= 0 && errno == ENOENT)
- value = default_value;
- else
- virReportSystemError(errno, _("cannot open %s"), path);
- goto cleanup;
- }
-
- if (fgets(value_str, sizeof(value_str), pathfp) == NULL) {
- virReportSystemError(errno, _("cannot read from %s"), path);
- goto cleanup;
- }
- if (virStrToLong_i(value_str, &tmp, 10, &value) < 0) {
- virReportError(VIR_ERR_INTERNAL_ERROR,
- _("could not convert '%s' to an integer"),
- value_str);
- goto cleanup;
- }
-
- cleanup:
- VIR_FORCE_FCLOSE(pathfp);
- VIR_FREE(path);
-
- return value;
-}
-
-
-static virBitmapPtr
-virNodeGetSiblingsListLinux(const char *dir, int cpu_id)
-{
- char *path = NULL;
- char *buf = NULL;
- virBitmapPtr ret = NULL;
-
- if (virAsprintf(&path, "%s/cpu%u/topology/thread_siblings_list",
- dir, cpu_id) < 0)
- goto cleanup;
-
- if (virFileReadAll(path, SYSFS_THREAD_SIBLINGS_LIST_LENGTH_MAX, &buf) < 0)
- goto cleanup;
-
- if (virBitmapParse(buf, &ret, virNumaGetMaxCPUs()) < 0)
- goto cleanup;
-
- cleanup:
- VIR_FREE(buf);
- VIR_FREE(path);
- return ret;
-}
-#else
-# define SYSFS_SYSTEM_PATH "fake"
-#endif
-
-
-int
-nodeGetInfo(virNodeInfoPtr nodeinfo)
-{
- virArch hostarch = virArchFromHost();
- unsigned long long memorybytes;
-
- memset(nodeinfo, 0, sizeof(*nodeinfo));
-
- if (virStrcpyStatic(nodeinfo->model, virArchToString(hostarch)) == NULL)
- return -1;
-
- if (virHostMemGetInfo(&memorybytes, NULL) < 0)
- return -1;
- nodeinfo->memory = memorybytes / 1024;
-
- if (virHostCPUGetInfo(hostarch,
- &nodeinfo->cpus, &nodeinfo->mhz,
- &nodeinfo->nodes, &nodeinfo->sockets,
- &nodeinfo->cores, &nodeinfo->threads) < 0)
- return -1;
-
- return 0;
-}
-
-
-static int
-nodeCapsInitNUMAFake(const char *cpupath ATTRIBUTE_UNUSED,
- virCapsPtr caps ATTRIBUTE_UNUSED)
-{
- virNodeInfo nodeinfo;
- virCapsHostNUMACellCPUPtr cpus;
- int ncpus;
- int s, c, t;
- int id, cid;
- int onlinecpus ATTRIBUTE_UNUSED;
-
- if (nodeGetInfo(&nodeinfo) < 0)
- return -1;
-
- ncpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
- onlinecpus = nodeinfo.cpus;
-
- if (VIR_ALLOC_N(cpus, ncpus) < 0)
- return -1;
-
- id = cid = 0;
- for (s = 0; s < nodeinfo.sockets; s++) {
- for (c = 0; c < nodeinfo.cores; c++) {
- for (t = 0; t < nodeinfo.threads; t++) {
-#ifdef __linux__
- if (virNodeGetCpuValue(cpupath, id, "online", 1)) {
-#endif
- cpus[cid].id = id;
- cpus[cid].socket_id = s;
- cpus[cid].core_id = c;
- if (!(cpus[cid].siblings = virBitmapNew(ncpus)))
- goto error;
- ignore_value(virBitmapSetBit(cpus[cid].siblings, id));
- cid++;
-#ifdef __linux__
- }
-#endif
-
- id++;
- }
- }
- }
-
- if (virCapabilitiesAddHostNUMACell(caps, 0,
- nodeinfo.memory,
-#ifdef __linux__
- onlinecpus, cpus,
-#else
- ncpus, cpus,
-#endif
- 0, NULL,
- 0, NULL) < 0)
- goto error;
-
- return 0;
-
- error:
- for (; id >= 0; id--)
- virBitmapFree(cpus[id].siblings);
- VIR_FREE(cpus);
- return -1;
-}
-
-
-/* returns 1 on success, 0 if the detection failed and -1 on hard error */
-static int
-virNodeCapsFillCPUInfo(const char *cpupath ATTRIBUTE_UNUSED,
- int cpu_id ATTRIBUTE_UNUSED,
- virCapsHostNUMACellCPUPtr cpu ATTRIBUTE_UNUSED)
-{
-#ifdef __linux__
- int tmp;
- cpu->id = cpu_id;
-
- if ((tmp = virNodeGetCpuValue(cpupath, cpu_id,
- "topology/physical_package_id", -1)) < 0)
- return 0;
-
- cpu->socket_id = tmp;
-
- if ((tmp = virNodeGetCpuValue(cpupath, cpu_id,
- "topology/core_id", -1)) < 0)
- return 0;
-
- cpu->core_id = tmp;
-
- if (!(cpu->siblings = virNodeGetSiblingsListLinux(cpupath, cpu_id)))
- return -1;
-
- return 0;
-#else
- virReportError(VIR_ERR_NO_SUPPORT, "%s",
- _("node cpu info not implemented on this platform"));
- return -1;
-#endif
-}
-
-static int
-virNodeCapsGetSiblingInfo(int node,
- virCapsHostNUMACellSiblingInfoPtr *siblings,
- int *nsiblings)
-{
- virCapsHostNUMACellSiblingInfoPtr tmp = NULL;
- int tmp_size = 0;
- int ret = -1;
- int *distances = NULL;
- int ndistances = 0;
- size_t i;
-
- if (virNumaGetDistances(node, &distances, &ndistances) < 0)
- goto cleanup;
-
- if (!distances) {
- *siblings = NULL;
- *nsiblings = 0;
- return 0;
- }
-
- if (VIR_ALLOC_N(tmp, ndistances) < 0)
- goto cleanup;
-
- for (i = 0; i < ndistances; i++) {
- if (!distances[i])
- continue;
-
- tmp[tmp_size].node = i;
- tmp[tmp_size].distance = distances[i];
- tmp_size++;
- }
-
- if (VIR_REALLOC_N(tmp, tmp_size) < 0)
- goto cleanup;
-
- *siblings = tmp;
- *nsiblings = tmp_size;
- tmp = NULL;
- tmp_size = 0;
- ret = 0;
- cleanup:
- VIR_FREE(distances);
- VIR_FREE(tmp);
- return ret;
-}
-
-static int
-virNodeCapsGetPagesInfo(int node,
- virCapsHostNUMACellPageInfoPtr *pageinfo,
- int *npageinfo)
-{
- int ret = -1;
- unsigned int *pages_size = NULL, *pages_avail = NULL;
- size_t npages, i;
-
- if (virNumaGetPages(node, &pages_size, &pages_avail, NULL, &npages) < 0)
- goto cleanup;
-
- if (VIR_ALLOC_N(*pageinfo, npages) < 0)
- goto cleanup;
- *npageinfo = npages;
-
- for (i = 0; i < npages; i++) {
- (*pageinfo)[i].size = pages_size[i];
- (*pageinfo)[i].avail = pages_avail[i];
- }
-
- ret = 0;
-
- cleanup:
- VIR_FREE(pages_avail);
- VIR_FREE(pages_size);
- return ret;
-}
-
-int
-nodeCapsInitNUMA(virCapsPtr caps)
-{
- int n;
- unsigned long long memory;
- virCapsHostNUMACellCPUPtr cpus = NULL;
- virBitmapPtr cpumap = NULL;
- virCapsHostNUMACellSiblingInfoPtr siblings = NULL;
- int nsiblings = 0;
- virCapsHostNUMACellPageInfoPtr pageinfo = NULL;
- int npageinfo;
- int ret = -1;
- int ncpus = 0;
- int cpu;
- bool topology_failed = false;
- int max_node;
-
- if (!virNumaIsAvailable()) {
- ret = nodeCapsInitNUMAFake(SYSFS_SYSTEM_PATH "/cpu", caps);
- goto cleanup;
- }
-
- if ((max_node = virNumaGetMaxNode()) < 0)
- goto cleanup;
-
- for (n = 0; n <= max_node; n++) {
- size_t i;
-
- if ((ncpus = virNumaGetNodeCPUs(n, &cpumap)) < 0) {
- if (ncpus == -2)
- continue;
-
- goto cleanup;
- }
-
- if (VIR_ALLOC_N(cpus, ncpus) < 0)
- goto cleanup;
- cpu = 0;
-
- for (i = 0; i < virBitmapSize(cpumap); i++) {
- if (virBitmapIsBitSet(cpumap, i)) {
- if (virNodeCapsFillCPUInfo(SYSFS_SYSTEM_PATH "/cpu",
- i, cpus + cpu++) < 0) {
- topology_failed = true;
- virResetLastError();
- }
- }
- }
-
- if (virNodeCapsGetSiblingInfo(n, &siblings, &nsiblings) < 0)
- goto cleanup;
-
- if (virNodeCapsGetPagesInfo(n, &pageinfo, &npageinfo) < 0)
- goto cleanup;
-
- /* Detect the amount of memory in the numa cell in KiB */
- virNumaGetNodeMemory(n, &memory, NULL);
- memory >>= 10;
-
- if (virCapabilitiesAddHostNUMACell(caps, n, memory,
- ncpus, cpus,
- nsiblings, siblings,
- npageinfo, pageinfo) < 0)
- goto cleanup;
-
- cpus = NULL;
- siblings = NULL;
- pageinfo = NULL;
- virBitmapFree(cpumap);
- cpumap = NULL;
- }
-
- ret = 0;
-
- cleanup:
- if ((topology_failed || ret < 0) && cpus)
- virCapabilitiesClearHostNUMACellCPUTopology(cpus, ncpus);
-
- virBitmapFree(cpumap);
- VIR_FREE(cpus);
- VIR_FREE(siblings);
- VIR_FREE(pageinfo);
- return ret;
-}
+++ /dev/null
-/*
- * nodeinfo.h: Helper routines for OS specific node information
- *
- * Copyright (C) 2006-2008, 2011-2012 Red Hat, Inc.
- * Copyright (C) 2006 Daniel P. Berrange
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- * Author: Daniel P. Berrange <berrange@redhat.com>
- */
-
-#ifndef __VIR_NODEINFO_H__
-# define __VIR_NODEINFO_H__
-
-# include "capabilities.h"
-
-int nodeGetInfo(virNodeInfoPtr nodeinfo);
-int nodeCapsInitNUMA(virCapsPtr caps);
-
-#endif /* __VIR_NODEINFO_H__*/
#include "viruuid.h"
#include "virbuffer.h"
#include "viralloc.h"
-#include "nodeinfo.h"
#include "virfile.h"
#include "vircommand.h"
#include "virstring.h"
false, false)) == NULL)
goto no_memory;
- if (nodeCapsInitNUMA(caps) < 0)
+ if (virCapabilitiesInitNUMA(caps) < 0)
goto no_memory;
if ((guest = virCapabilitiesAddGuest(caps,
#include "openvz_util.h"
#include "virbuffer.h"
#include "openvz_conf.h"
-#include "nodeinfo.h"
#include "virhostcpu.h"
#include "virhostmem.h"
#include "viralloc.h"
openvzNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED,
virNodeInfoPtr nodeinfo)
{
- return nodeGetInfo(nodeinfo);
+ return virCapabilitiesGetNodeInfo(nodeinfo);
}
#include "viruuid.h"
#include "domain_conf.h"
#include "storage_conf.h"
-#include "nodeinfo.h"
#include "virfile.h"
#include "interface_conf.h"
#include "phyp_driver.h"
* unexpected failures. We don't want to break the QEMU
* driver in this scenario, so log errors & carry on
*/
- if (nodeCapsInitNUMA(caps) < 0) {
+ if (virCapabilitiesInitNUMA(caps) < 0) {
virCapabilitiesFreeNUMAInfo(caps);
VIR_WARN
("Failed to query host NUMA topology, disabling NUMA capabilities");
#include "virfile.h"
#include "virpidfile.h"
#include "virprocess.h"
-#include "nodeinfo.h"
#include "cpu/cpu.h"
#include "cpu/cpu_x86.h"
#include "domain_conf.h"
* unexpected failures. We don't want to break the QEMU
* driver in this scenario, so log errors & carry on
*/
- if (nodeCapsInitNUMA(caps) < 0) {
+ if (virCapabilitiesInitNUMA(caps) < 0) {
virCapabilitiesFreeNUMAInfo(caps);
VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities");
}
#include "viralloc.h"
#include "datatypes.h"
#include "virxml.h"
-#include "nodeinfo.h"
#include "virlog.h"
#include "cpu/cpu.h"
#include "domain_nwfilter.h"
#include "virlog.h"
#include "datatypes.h"
#include "virbuffer.h"
-#include "nodeinfo.h"
#include "virhostcpu.h"
#include "virhostmem.h"
#include "virnetdevtap.h"
if (virNodeGetInfoEnsureACL(conn) < 0)
return -1;
- return nodeGetInfo(nodeinfo);
+ return virCapabilitiesGetNodeInfo(nodeinfo);
}
#include "virbuffer.h"
#include "virconf.h"
#include "viralloc.h"
-#include "nodeinfo.h"
#include "virlog.h"
#include "domain_nwfilter.h"
#include "virfile.h"
* unexpected failures. We don't want to break the QEMU
* driver in this scenario, so log errors & carry on
*/
- if (nodeCapsInitNUMA(caps) < 0) {
+ if (virCapabilitiesInitNUMA(caps) < 0) {
virCapabilitiesFreeNUMAInfo(caps);
VIR_WARN("Failed to query host NUMA topology, disabling NUMA capabilities");
}
#include "uml_driver.h"
#include "uml_conf.h"
#include "virbuffer.h"
-#include "nodeinfo.h"
#include "virhostcpu.h"
#include "virhostmem.h"
#include "capabilities.h"
if (virNodeGetInfoEnsureACL(conn) < 0)
return -1;
- return nodeGetInfo(nodeinfo);
+ return virCapabilitiesGetNodeInfo(nodeinfo);
}
#include "domain_event.h"
#include "virlog.h"
#include "viralloc.h"
-#include "nodeinfo.h"
#include "virhostmem.h"
#include "virstring.h"
#include "virfile.h"
false, false)) == NULL)
goto no_memory;
- if (nodeCapsInitNUMA(caps) < 0)
+ if (virCapabilitiesInitNUMA(caps) < 0)
goto no_memory;
if ((guest = virCapabilitiesAddGuest(caps,
vboxNodeGetInfo(virConnectPtr conn ATTRIBUTE_UNUSED,
virNodeInfoPtr nodeinfo)
{
- return nodeGetInfo(nodeinfo);
+ return virCapabilitiesGetNodeInfo(nodeinfo);
}
static int
#include "cpu/cpu.h"
#include "dirname.h"
#include "viralloc.h"
-#include "nodeinfo.h"
#include "virfile.h"
#include "viruuid.h"
#include "virerror.h"
false, false)) == NULL)
goto error;
- if (nodeCapsInitNUMA(caps) < 0)
+ if (virCapabilitiesInitNUMA(caps) < 0)
goto error;
/* i686 guests are always supported */
#include "configmake.h"
#include "virfile.h"
#include "virstoragefile.h"
-#include "nodeinfo.h"
#include "virstring.h"
#include "cpu/cpu.h"
#include "virtypedparam.h"
false, false)) == NULL)
return NULL;
- if (nodeCapsInitNUMA(caps) < 0)
+ if (virCapabilitiesInitNUMA(caps) < 0)
goto error;
emulators[k], virt_types[k]) < 0)
goto error;
- if (nodeGetInfo(&nodeinfo))
+ if (virCapabilitiesGetNodeInfo(&nodeinfo))
goto error;
if (!(caps->host.cpu = virCPUGetHost(caps->host.arch, VIR_CPU_TYPE_HOST,
if (virNodeGetInfoEnsureACL(conn) < 0)
return -1;
- return nodeGetInfo(nodeinfo);
+ return virCapabilitiesGetNodeInfo(nodeinfo);
}
static int vzConnectIsEncrypted(virConnectPtr conn ATTRIBUTE_UNUSED)
#include "virerror.h"
#include "viralloc.h"
#include "virstring.h"
-#include "nodeinfo.h"
#include "virlog.h"
#include "datatypes.h"
#include "domain_conf.h"
#include "viruri.h"
#include "vircommand.h"
#include "virnodesuspend.h"
-#include "nodeinfo.h"
#include "virhostmem.h"
#include "configmake.h"
#include "virstring.h"
#include "testutils.h"
#include "internal.h"
-#include "nodeinfo.h"
#include "viralloc.h"
#include "vircommand.h"
#include "virfile.h"