[libvirt] [PATCH RFC 1/5] libxl: describe host topology in capabilities

Joao Martins joao.m.martins at oracle.com
Fri Jul 8 16:16:31 UTC 2016


Refactor code from hwcaps to its own helper namely
libxlCapsInitCPU to handle all host cpu related operations.

Signed-off-by: Joao Martins <joao.m.martins at oracle.com>
---
 src/libxl/libxl_capabilities.c | 46 +++++++++++++++++++++++++++++++++---------
 1 file changed, 37 insertions(+), 9 deletions(-)

diff --git a/src/libxl/libxl_capabilities.c b/src/libxl/libxl_capabilities.c
index 0145116..f71fd3b 100644
--- a/src/libxl/libxl_capabilities.c
+++ b/src/libxl/libxl_capabilities.c
@@ -57,12 +57,47 @@ struct guest_arch {
 
 #define XEN_CAP_REGEX "(xen|hvm)-[[:digit:]]+\\.[[:digit:]]+-(aarch64|armv7l|x86_32|x86_64|ia64|powerpc64)(p|be)?"
 
+/* hw_caps is an array of 32-bit words whose meaning is listed in
+ * xen-unstable.hg/xen/include/asm-x86/cpufeature.h.  Each feature
+ * is defined in the form X*32+Y, corresponding to the Y'th bit in
+ * the X'th 32-bit word of hw_cap.
+ */
+static int
+libxlCapsInitCPU(virCapsPtr caps, libxl_physinfo *phy_info)
+{
+    virCPUDefPtr cpu = NULL;
+    int ret = -1;
+    int host_pae;
+
+    if (VIR_ALLOC(cpu) < 0)
+        goto error;
+
+    host_pae = phy_info->hw_cap[0] & LIBXL_X86_FEATURE_PAE_MASK;
+    if (host_pae &&
+        virCapabilitiesAddHostFeature(caps, "pae") < 0)
+        goto error;
+
+    cpu->type = VIR_CPU_TYPE_HOST;
+    cpu->cores = phy_info->cores_per_socket;
+    cpu->threads = phy_info->threads_per_core;
+    cpu->sockets = phy_info->nr_cpus / (cpu->cores * cpu->threads);
+    caps->host.cpu = cpu;
+
+    ret = 0;
+
+ cleanup:
+
+    return ret;
+
+ error:
+    virCPUDefFree(cpu);
+    goto cleanup;
+}
 
 static int
 libxlCapsInitHost(libxl_ctx *ctx, virCapsPtr caps)
 {
     libxl_physinfo phy_info;
-    int host_pae;
 
     if (libxl_get_physinfo(ctx, &phy_info) != 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -70,14 +105,7 @@ libxlCapsInitHost(libxl_ctx *ctx, virCapsPtr caps)
         return -1;
     }
 
-    /* hw_caps is an array of 32-bit words whose meaning is listed in
-     * xen-unstable.hg/xen/include/asm-x86/cpufeature.h.  Each feature
-     * is defined in the form X*32+Y, corresponding to the Y'th bit in
-     * the X'th 32-bit word of hw_cap.
-     */
-    host_pae = phy_info.hw_cap[0] & LIBXL_X86_FEATURE_PAE_MASK;
-    if (host_pae &&
-        virCapabilitiesAddHostFeature(caps, "pae") < 0)
+    if (libxlCapsInitCPU(caps, &phy_info) < 0)
         return -1;
 
     if (virCapabilitiesSetNetPrefix(caps, LIBXL_GENERATED_PREFIX_XEN) < 0)
-- 
2.1.4




More information about the libvir-list mailing list