aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuergen Gross <juergen.gross@ts.fujitsu.com>2011-02-14 16:56:20 +0000
committerJuergen Gross <juergen.gross@ts.fujitsu.com>2011-02-14 16:56:20 +0000
commitfb37da1031eb8ed399b9b52a0eebb8b24e005999 (patch)
treedb7b1ebe477ea1be23d58eb2bf09fbe0301ce063
parentb948a2f41ac78959e883f12bd4ca011b906d814f (diff)
downloadxen-fb37da1031eb8ed399b9b52a0eebb8b24e005999.tar.gz
xen-fb37da1031eb8ed399b9b52a0eebb8b24e005999.tar.bz2
xen-fb37da1031eb8ed399b9b52a0eebb8b24e005999.zip
xl: Support more than 32 vcpus for xl vcpu-set
xl vcpu-set currently uses a 32 bit mask for specifying which cpus are to be set online. This restricts the number of cpus supported by this command. The patch switches to libxl_cpumap, the interface of libxl_set_vcpuonline() is changed accordingly. Signed-off-by: Juergen Gross <juergen.gross@ts.fujitsu.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/libxl.c4
-rw-r--r--tools/libxl/libxl.h2
-rw-r--r--tools/libxl/xl_cmdimpl.c14
3 files changed, 13 insertions, 7 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 41db886bd0..be0e1a075c 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2463,7 +2463,7 @@ int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid,
return 0;
}
-int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, uint32_t bitmask)
+int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
libxl_dominfo info;
@@ -2483,7 +2483,7 @@ retry_transaction:
for (i = 0; i <= info.vcpu_max_id; i++)
libxl__xs_write(&gc, t,
libxl__sprintf(&gc, "%s/cpu/%u/availability", dompath, i),
- "%s", ((1 << i) & bitmask) ? "online" : "offline");
+ "%s", libxl_cpumap_test(cpumap, i) ? "online" : "offline");
if (!xs_transaction_end(ctx->xsh, t, 0)) {
if (errno == EAGAIN)
goto retry_transaction;
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index f8df389201..20d981dd68 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -499,7 +499,7 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ctx *ctx, uint32_t domid,
int *nb_vcpu, int *nrcpus);
int libxl_set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid, uint32_t vcpuid,
libxl_cpumap *cpumap);
-int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, uint32_t bitmask);
+int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_cpumap *cpumap);
int libxl_get_sched_id(libxl_ctx *ctx);
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 89540f72e0..1eebe2ecde 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -3607,7 +3607,7 @@ static void vcpuset(const char *d, const char* nr_vcpus)
{
char *endptr;
unsigned int max_vcpus, i;
- uint32_t bitmask = 0;
+ libxl_cpumap cpumap;
max_vcpus = strtoul(nr_vcpus, &endptr, 10);
if (nr_vcpus == endptr) {
@@ -3617,11 +3617,17 @@ static void vcpuset(const char *d, const char* nr_vcpus)
find_domain(d);
+ if (libxl_cpumap_alloc(&ctx, &cpumap)) {
+ fprintf(stderr, "libxl_cpumap_alloc failed\n");
+ return;
+ }
for (i = 0; i < max_vcpus; i++)
- bitmask |= 1 << i;
+ libxl_cpumap_set(&cpumap, i);
+
+ if (libxl_set_vcpuonline(&ctx, domid, &cpumap) < 0)
+ fprintf(stderr, "libxl_set_vcpuonline failed domid=%d max_vcpus=%d\n", domid, max_vcpus);
- if (libxl_set_vcpuonline(&ctx, domid, bitmask) < 0)
- fprintf(stderr, "libxl_set_vcpuonline failed domid=%d bitmask=%x\n", domid, bitmask);
+ libxl_cpumap_destroy(&cpumap);
}
int main_vcpuset(int argc, char **argv)