WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] libxl: Support cpupools

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] libxl: Support cpupools
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 07 May 2010 02:25:31 -0700
Delivery-date: Fri, 07 May 2010 02:27:57 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1273221418 -3600
# Node ID 360032605d078ce21e6bad73c4995af0e875431a
# Parent  d35c6af20f7ada76f4802869e6f23bc721fb3609
libxl: Support cpupools

Signed-off-by: Juergen Gross <juergen.gross@xxxxxxxxxxxxxx>
---
 tools/libxl/libxl.c       |   27 +++++++++++++++++++++++++++
 tools/libxl/libxl.h       |    7 +++++++
 tools/libxl/libxl_utils.c |   35 +++++++++++++++++++++++++++++++++++
 tools/libxl/libxl_utils.h |    2 ++
 tools/libxl/xl_cmdimpl.c  |   35 +++++++++++++++++++++++++++++------
 5 files changed, 100 insertions(+), 6 deletions(-)

diff -r d35c6af20f7a -r 360032605d07 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Fri May 07 09:35:58 2010 +0100
+++ b/tools/libxl/libxl.c       Fri May 07 09:36:58 2010 +0100
@@ -111,6 +111,12 @@ int libxl_domain_make(struct libxl_ctx *
         return ERROR_FAIL;
     }
 
+    ret = xc_cpupool_movedomain(ctx->xch, info->poolid, *domid);
+    if (ret < 0) {
+        XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, ret, "domain move fail");
+        return ERROR_FAIL;
+    }
+
     dom_path = libxl_xs_get_dompath(ctx, *domid);
     if (!dom_path)
         return ERROR_FAIL;
@@ -163,6 +169,7 @@ retry_transaction:
 
     xs_write(ctx->xsh, t, libxl_sprintf(ctx, "%s/uuid", vm_path), uuid_string, 
strlen(uuid_string));
     xs_write(ctx->xsh, t, libxl_sprintf(ctx, "%s/name", vm_path), info->name, 
strlen(info->name));
+    xs_write(ctx->xsh, t, libxl_sprintf(ctx, "%s/pool_name", vm_path), 
info->poolname, strlen(info->poolname));
 
     libxl_xs_writev(ctx, t, dom_path, info->xsdata);
     libxl_xs_writev(ctx, t, libxl_sprintf(ctx, "%s/platform", dom_path), 
info->platformdata);
@@ -424,6 +431,26 @@ int libxl_domain_info(struct libxl_ctx *
 
     xcinfo2xlinfo(&xcinfo, info_r);
     return 0;
+}
+
+struct libxl_poolinfo * libxl_list_pool(struct libxl_ctx *ctx, int *nb_pool)
+{
+    struct libxl_poolinfo *ptr;
+    int i, ret;
+    xc_cpupoolinfo_t info[256];
+    int size = 256;
+
+    ptr = calloc(size, sizeof(struct libxl_poolinfo));
+    if (!ptr) return NULL;
+
+    ret = xc_cpupool_getinfo(ctx->xch, 0, 256, info);
+    if (ret<0) return NULL;
+
+    for (i = 0; i < ret; i++) {
+        ptr[i].poolid = info[i].cpupool_id;
+    }
+    *nb_pool = ret;
+    return ptr;
 }
 
 /* this API call only list VM running on this host. a VM can be an aggregate 
of multiple domains. */
diff -r d35c6af20f7a -r 360032605d07 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h       Fri May 07 09:35:58 2010 +0100
+++ b/tools/libxl/libxl.h       Fri May 07 09:36:58 2010 +0100
@@ -34,6 +34,10 @@ struct libxl_dominfo {
     uint64_t cpu_time;
     uint32_t vcpu_max_id;
     uint32_t vcpu_online;
+};
+
+struct libxl_poolinfo {
+    uint32_t poolid;
 };
 
 struct libxl_vminfo {
@@ -85,6 +89,8 @@ typedef struct {
     uint8_t uuid[16];
     char **xsdata;
     char **platformdata;
+    uint32_t poolid;
+    char *poolname;
 } libxl_domain_create_info;
 
 typedef struct {
@@ -340,6 +346,7 @@ int libxl_domain_info(struct libxl_ctx*,
 int libxl_domain_info(struct libxl_ctx*, struct libxl_dominfo *info_r,
                       uint32_t domid);
 struct libxl_dominfo * libxl_list_domain(struct libxl_ctx*, int *nb_domain);
+struct libxl_poolinfo * libxl_list_pool(struct libxl_ctx*, int *nb_pool);
 struct libxl_vminfo * libxl_list_vm(struct libxl_ctx *ctx, int *nb_vm);
 
 typedef struct libxl_device_model_starting libxl_device_model_starting;
diff -r d35c6af20f7a -r 360032605d07 tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c Fri May 07 09:35:58 2010 +0100
+++ b/tools/libxl/libxl_utils.c Fri May 07 09:36:58 2010 +0100
@@ -72,6 +72,41 @@ int libxl_name_to_domid(struct libxl_ctx
             continue;
         if (strcmp(domname, name) == 0) {
             *domid = dominfo[i].domid;
+            return 0;
+        }
+    }
+    return -1;
+}
+
+char *libxl_poolid_to_name(struct libxl_ctx *ctx, uint32_t poolid)
+{
+    unsigned int len;
+    char path[strlen("/local/pool") + 12];
+    char *s;
+
+    snprintf(path, sizeof(path), "/local/pool/%d/name", poolid);
+    s = xs_read(ctx->xsh, XBT_NULL, path, &len);
+    libxl_ptr_add(ctx, s);
+    return s;
+}
+
+int libxl_name_to_poolid(struct libxl_ctx *ctx, const char *name,
+                        uint32_t *poolid)
+{
+    int i, nb_pools;
+    char *poolname;
+    struct libxl_poolinfo *poolinfo;
+
+    poolinfo = libxl_list_pool(ctx, &nb_pools);
+    if (!poolinfo)
+        return ERROR_NOMEM;
+
+    for (i = 0; i < nb_pools; i++) {
+        poolname = libxl_poolid_to_name(ctx, poolinfo[i].poolid);
+        if (!poolname)
+            continue;
+        if (strcmp(poolname, name) == 0) {
+            *poolid = poolinfo[i].poolid;
             return 0;
         }
     }
diff -r d35c6af20f7a -r 360032605d07 tools/libxl/libxl_utils.h
--- a/tools/libxl/libxl_utils.h Fri May 07 09:35:58 2010 +0100
+++ b/tools/libxl/libxl_utils.h Fri May 07 09:36:58 2010 +0100
@@ -21,6 +21,8 @@ unsigned long libxl_get_required_shadow_
 unsigned long libxl_get_required_shadow_memory(unsigned long maxmem_kb, 
unsigned int smp_cpus);
 int libxl_name_to_domid(struct libxl_ctx *ctx, const char *name, uint32_t 
*domid);
 char *libxl_domid_to_name(struct libxl_ctx *ctx, uint32_t domid);
+int libxl_name_to_poolid(struct libxl_ctx *ctx, const char *name, uint32_t 
*poolid);
+char *libxl_poolid_to_name(struct libxl_ctx *ctx, uint32_t poolid);
 int libxl_get_stubdom_id(struct libxl_ctx *ctx, int guest_domid);
 int libxl_is_stubdom(struct libxl_ctx *ctx, uint32_t domid, uint32_t 
*target_domid);
 int libxl_create_logfile(struct libxl_ctx *ctx, char *name, char **full_name);
diff -r d35c6af20f7a -r 360032605d07 tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Fri May 07 09:35:58 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Fri May 07 09:36:58 2010 +0100
@@ -87,8 +87,7 @@ struct save_file_header {
 
 #define SAVEFILE_BYTEORDER_VALUE ((uint32_t)0x01020304UL)
 
-static int domain_qualifier_to_domid(const char *p, uint32_t *domid_r,
-                                     int *was_name_r)
+static int qualifier_to_id(const char *p, uint32_t *id_r)
 {
     int i, alldigit;
 
@@ -101,14 +100,32 @@ static int domain_qualifier_to_domid(con
     }
 
     if (i > 0 && alldigit) {
-        *domid_r = strtoul(p, NULL, 10);
-        if (was_name_r) *was_name_r = 0;
+        *id_r = strtoul(p, NULL, 10);
         return 0;
     } else {
         /* check here if it's a uuid and do proper conversion */
     }
-    if (was_name_r) *was_name_r = 1;
-    return libxl_name_to_domid(&ctx, p, domid_r);
+    return 1;
+}
+
+static int domain_qualifier_to_domid(const char *p, uint32_t *domid_r,
+                                     int *was_name_r)
+{
+    int was_name;
+
+    was_name = qualifier_to_id(p, domid_r);
+    if (was_name_r) *was_name_r = was_name;
+    return was_name ? libxl_name_to_domid(&ctx, p, domid_r) : 0;
+}
+
+static int pool_qualifier_to_poolid(const char *p, uint32_t *poolid_r,
+                                     int *was_name_r)
+{
+    int was_name;
+
+    was_name = qualifier_to_id(p, poolid_r);
+    if (was_name_r) *was_name_r = was_name;
+    return was_name ? libxl_name_to_poolid(&ctx, p, poolid_r) : 0;
 }
 
 static void find_domain(const char *p)
@@ -146,6 +163,7 @@ static void init_create_info(libxl_domai
     c_info->hvm = 1;
     c_info->oos = 1;
     c_info->ssidref = 0;
+    c_info->poolid = 0;
 }
 
 static void init_build_info(libxl_domain_build_info *b_info, 
libxl_domain_create_info *c_info)
@@ -277,6 +295,7 @@ static void printf_info(libxl_domain_cre
            (c_info->uuid)[4], (c_info->uuid)[5], (c_info->uuid)[6], 
(c_info->uuid)[7],
            (c_info->uuid)[8], (c_info->uuid)[9], (c_info->uuid)[10], 
(c_info->uuid)[11],
            (c_info->uuid)[12], (c_info->uuid)[13], (c_info->uuid)[14], 
(c_info->uuid)[15]);
+    printf("cpupool: %s (%d)\n", c_info->poolname, c_info->poolid);
     if (c_info->xsdata)
         printf("xsdata: contains data\n");
     else
@@ -433,6 +452,10 @@ static void parse_config_data(const char
 
     if (!xlu_cfg_get_long(config, "oos", &l))
         c_info->oos = l;
+
+    if (!xlu_cfg_get_string (config, "pool", &buf))
+        pool_qualifier_to_poolid(buf, &c_info->poolid, NULL);
+    c_info->poolname = libxl_poolid_to_name(&ctx, c_info->poolid);
 
     init_build_info(b_info, c_info);
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] libxl: Support cpupools, Xen patchbot-unstable <=