diff options
author | Juergen Gross <juergen.gross@ts.fujitsu.com> | 2010-12-09 13:37:32 +0100 |
---|---|---|
committer | Juergen Gross <juergen.gross@ts.fujitsu.com> | 2010-12-09 13:37:32 +0100 |
commit | d567ebfef17b1baf331d50af13b97725a7c43b39 (patch) | |
tree | 09ccd1e8e4cf6b1bd53b56f6122fb18688b62794 /tools/libxl | |
parent | 4f4f69baa5124b1182315dd73a24d4f2146f8157 (diff) | |
download | xen-d567ebfef17b1baf331d50af13b97725a7c43b39.tar.gz xen-d567ebfef17b1baf331d50af13b97725a7c43b39.tar.bz2 xen-d567ebfef17b1baf331d50af13b97725a7c43b39.zip |
Support renaming of cpupools
Add a new library function libxl_cpupool_rename() and a new xl command
xl cpupool-rename to support renaming of cpupools.
Signed-off-by: juergen.gross@ts.fujitsu.com
Signed-off-by: Ian Jackson <ian.jackson.citrix.com>
Diffstat (limited to 'tools/libxl')
-rw-r--r-- | tools/libxl/libxl.c | 43 | ||||
-rw-r--r-- | tools/libxl/libxl.h | 1 | ||||
-rw-r--r-- | tools/libxl/libxl_utils.c | 4 | ||||
-rw-r--r-- | tools/libxl/xl.h | 1 | ||||
-rw-r--r-- | tools/libxl/xl_cmdimpl.c | 41 | ||||
-rw-r--r-- | tools/libxl/xl_cmdtable.c | 5 |
6 files changed, 93 insertions, 2 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 6436ada8f2..68889b9aa2 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -3885,6 +3885,49 @@ out: return rc; } +int libxl_cpupool_rename(libxl_ctx *ctx, const char *name, uint32_t poolid) +{ + libxl__gc gc = LIBXL_INIT_GC(ctx); + xs_transaction_t t; + xc_cpupoolinfo_t *info; + int rc; + + info = xc_cpupool_getinfo(ctx->xch, poolid); + if (info == NULL) { + libxl__free_all(&gc); + return ERROR_NOMEM; + } + + rc = ERROR_INVAL; + if (info->cpupool_id != poolid) + goto out; + + rc = 0; + + for (;;) { + t = xs_transaction_start(ctx->xsh); + + libxl__xs_write(&gc, t, + libxl__sprintf(&gc, "/local/pool/%d/name", poolid), + "%s", name); + + if (xs_transaction_end(ctx->xsh, t, 0)) + break; + + if (errno == EAGAIN) + continue; + + rc = ERROR_FAIL; + break; + } + +out: + xc_cpupool_infofree(ctx->xch, info); + libxl__free_all(&gc); + + return rc; +} + int libxl_cpupool_cpuadd(libxl_ctx *ctx, uint32_t poolid, int cpu) { int rc; diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index e763665c8a..6e141a779e 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -528,6 +528,7 @@ int libxl_create_cpupool(libxl_ctx *ctx, const char *name, int schedid, libxl_cpumap cpumap, libxl_uuid *uuid, uint32_t *poolid); int libxl_destroy_cpupool(libxl_ctx *ctx, uint32_t poolid); +int libxl_cpupool_rename(libxl_ctx *ctx, const char *name, uint32_t poolid); int libxl_cpupool_cpuadd(libxl_ctx *ctx, uint32_t poolid, int cpu); int libxl_cpupool_cpuadd_node(libxl_ctx *ctx, uint32_t poolid, int node, int *cpus); int libxl_cpupool_cpuremove(libxl_ctx *ctx, uint32_t poolid, int cpu); diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index 40c73d4610..413768d758 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -107,10 +107,10 @@ char *libxl_cpupoolid_to_name(libxl_ctx *ctx, uint32_t poolid) char path[strlen("/local/pool") + 12]; char *s; - if (poolid == 0) - return strdup("Pool-0"); snprintf(path, sizeof(path), "/local/pool/%d/name", poolid); s = xs_read(ctx->xsh, XBT_NULL, path, &len); + if (!s && (poolid == 0)) + return strdup("Pool-0"); return s; } diff --git a/tools/libxl/xl.h b/tools/libxl/xl.h index 69eb9dfc88..64133e4187 100644 --- a/tools/libxl/xl.h +++ b/tools/libxl/xl.h @@ -82,6 +82,7 @@ int main_network2detach(int argc, char **argv); int main_cpupoolcreate(int argc, char **argv); int main_cpupoollist(int argc, char **argv); int main_cpupooldestroy(int argc, char **argv); +int main_cpupoolrename(int argc, char **argv); int main_cpupoolcpuadd(int argc, char **argv); int main_cpupoolcpuremove(int argc, char **argv); int main_cpupoolmigrate(int argc, char **argv); diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 9c14d60438..cc5de43773 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -5729,6 +5729,47 @@ int main_cpupooldestroy(int argc, char **argv) return -libxl_destroy_cpupool(&ctx, poolid); } +int main_cpupoolrename(int argc, char **argv) +{ + int opt; + const char *pool; + const char *new_name; + uint32_t poolid; + + while ((opt = getopt(argc, argv, "h")) != -1) { + switch (opt) { + case 'h': + help("cpupool-rename"); + return 0; + default: + fprintf(stderr, "option `%c' not supported.\n", opt); + break; + } + } + + pool = argv[optind++]; + if (!pool || !argv[optind]) { + fprintf(stderr, "'xl cpupool-rename' requires 2 arguments.\n\n"); + help("cpupool-rename"); + return 1; + } + + if (cpupool_qualifier_to_cpupoolid(pool, &poolid, NULL) || + !libxl_cpupoolid_to_name(&ctx, poolid)) { + fprintf(stderr, "unknown cpupool \'%s\'\n", pool); + return -ERROR_FAIL; + } + + new_name = argv[optind]; + + if (libxl_cpupool_rename(&ctx, new_name, poolid)) { + fprintf(stderr, "Can't rename cpupool '%s'.\n", pool); + return 1; + } + + return 0; +} + int main_cpupoolcpuadd(int argc, char **argv) { int opt; diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c index 0da6077bec..854f7da96a 100644 --- a/tools/libxl/xl_cmdtable.c +++ b/tools/libxl/xl_cmdtable.c @@ -358,6 +358,11 @@ struct cmd_spec cmd_table[] = { "Deactivates a CPU pool", "<CPU Pool>", }, + { "cpupool-rename", + &main_cpupoolrename, + "Renames a CPU pool", + "<CPU Pool> <new name>", + }, { "cpupool-cpu-add", &main_cpupoolcpuadd, "Adds a CPU to a CPU pool", |