diff --git a/docs/schemas/capability.rng b/docs/schemas/capability.rng
index 8f3fbd9ae2..106ca73126 100644
--- a/docs/schemas/capability.rng
+++ b/docs/schemas/capability.rng
@@ -176,6 +176,10 @@
+
+
+
+
@@ -189,6 +193,12 @@
+
+
+
+
+
+
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
index a0e597b232..d53d5a3b44 100644
--- a/src/conf/capabilities.c
+++ b/src/conf/capabilities.c
@@ -1,7 +1,7 @@
/*
* capabilities.c: hypervisor capabilities
*
- * Copyright (C) 2006-2008, 2010-2011 Red Hat, Inc.
+ * Copyright (C) 2006-2008, 2010-2011, 2013 Red Hat, Inc.
* Copyright (C) 2006-2008 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@@ -273,6 +273,7 @@ int
virCapabilitiesAddHostNUMACell(virCapsPtr caps,
int num,
int ncpus,
+ unsigned long long mem,
virCapsHostNUMACellCPUPtr cpus)
{
virCapsHostNUMACellPtr cell;
@@ -286,6 +287,7 @@ virCapabilitiesAddHostNUMACell(virCapsPtr caps,
cell->ncpus = ncpus;
cell->num = num;
+ cell->mem = mem;
cell->cpus = cpus;
caps->host.numaCell[caps->host.nnumaCell++] = cell;
@@ -712,6 +714,13 @@ virCapabilitiesFormatNUMATopology(virBufferPtr xml,
virBufferAsprintf(xml, " \n", ncells);
for (i = 0; i < ncells; i++) {
virBufferAsprintf(xml, " \n", cells[i]->num);
+
+ /* Print out the numacell memory total if it is available */
+ if (cells[i]->mem)
+ virBufferAsprintf(xml,
+ " %llu\n",
+ cells[i]->mem);
+
virBufferAsprintf(xml, " \n", cells[i]->ncpus);
for (j = 0; j < cells[i]->ncpus; j++) {
virBufferAsprintf(xml, " maxCell) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cell %d out of range (0-%d)"),
+ cell, maxCell);
+ goto cleanup;
+ }
+
+ /* Get the amount of memory(bytes) in the node */
+ mem = numa_node_size64(cell, NULL);
+ if (mem < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Failed to query NUMA total memory for node: %d"),
+ cell);
+ goto cleanup;
+ }
+
+ /* Convert the memory from bytes to KiB */
+ memKiB = mem >> 10;
+
+cleanup:
+ return memKiB;
+}
+
+
#else
int nodeCapsInitNUMA(virCapsPtr caps ATTRIBUTE_UNUSED) {
return 0;
@@ -1686,4 +1733,11 @@ unsigned long long nodeGetFreeMemory(virConnectPtr conn ATTRIBUTE_UNUSED)
_("NUMA memory information not available on this platform"));
return 0;
}
+
+static unsigned long long nodeGetCellMemory(int cell)
+{
+ virReportError(VIR_ERR_NO_SUPPORT, "%s",
+ _("NUMA memory information not available on this platform"));
+ return 0;
+}
#endif
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 30ce8e7e30..0037a6fbff 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -184,7 +184,7 @@ testBuildCapabilities(virConnectPtr conn) {
if (virCapabilitiesAddHostNUMACell(caps, i, privconn->cells[i].numCpus,
- cpu_cells) < 0)
+ 0, cpu_cells) < 0)
goto no_memory;
}
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 27b87fc60c..4995d633f1 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -1141,7 +1141,7 @@ sexpr_to_xend_topology(const struct sexpr *root, virCapsPtr caps)
}
virBitmapFree(cpuset);
- if (virCapabilitiesAddHostNUMACell(caps, cell, nb_cpus, cpuInfo) < 0)
+ if (virCapabilitiesAddHostNUMACell(caps, cell, nb_cpus, 0, cpuInfo) < 0)
goto memory_error;
cpuInfo = NULL;
}
diff --git a/tests/capabilityschemadata/caps-test3.xml b/tests/capabilityschemadata/caps-test3.xml
new file mode 100644
index 0000000000..e6c56c55f9
--- /dev/null
+++ b/tests/capabilityschemadata/caps-test3.xml
@@ -0,0 +1,88 @@
+
+
+
+ 35383339-3134-5553-4531-30314e394a50
+
+ x86_64
+ Westmere
+ Intel
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tcp
+
+
+
+
+
+ 12572412
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+ 12582908
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+ none
+ 0
+
+
+ dac
+ 0
+
+
+
+
|