diff options
author | Yang Zhang <yang.z.zhang@Intel.com> | 2012-06-28 17:51:56 +0100 |
---|---|---|
committer | Yang Zhang <yang.z.zhang@Intel.com> | 2012-06-28 17:51:56 +0100 |
commit | e1e1e98cacd82fa054ac3c6b381d9833236110e0 (patch) | |
tree | 77708e08b3f5c559b3c74d0323d7d33155e00aaa /tools/libxl/libxl_utils.c | |
parent | 928c75ce59fc11c707b8bfd0b99ce0c07ab89926 (diff) | |
download | xen-e1e1e98cacd82fa054ac3c6b381d9833236110e0.tar.gz xen-e1e1e98cacd82fa054ac3c6b381d9833236110e0.tar.bz2 xen-e1e1e98cacd82fa054ac3c6b381d9833236110e0.zip |
libxl: allow setting more than 31 vcpus
In current implementation, it uses integer to record current avail
cpus and this only allows user to specify 31 vcpus. In following
patch, it uses cpumap instead integer which make more sense than
before. Also there is no limit to the max vcpus.
Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/libxl/libxl_utils.c')
-rw-r--r-- | tools/libxl/libxl_utils.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index 2acf7d4a43..d07a5a7a58 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -511,7 +511,7 @@ void libxl_cpumap_dispose(libxl_cpumap *map) free(map->map); } -int libxl_cpumap_test(libxl_cpumap *cpumap, int cpu) +int libxl_cpumap_test(const libxl_cpumap *cpumap, int cpu) { if (cpu >= cpumap->size * 8) return 0; @@ -532,6 +532,31 @@ void libxl_cpumap_reset(libxl_cpumap *cpumap, int cpu) cpumap->map[cpu / 8] &= ~(1 << (cpu & 7)); } +int libxl_cpumap_count_set(const libxl_cpumap *cpumap) +{ + int i, nr_set_cpus = 0; + libxl_for_each_set_cpu(i, *cpumap) + nr_set_cpus++; + + return nr_set_cpus; +} + +/* NB. caller is responsible for freeing the memory */ +char *libxl_cpumap_to_hex_string(const libxl_cpumap *cpumap) +{ + int i = cpumap->size; + char *p = libxl__zalloc(NULL, cpumap->size * 2 + 3); + char *q = p; + strncpy(p, "0x", 2); + p += 2; + while(--i >= 0) { + sprintf(p, "%02x", cpumap->map[i]); + p += 2; + } + *p = '\0'; + return q; +} + int libxl_get_max_cpus(libxl_ctx *ctx) { return xc_get_max_cpus(ctx->xch); |