]> xenbits.xensource.com Git - people/tklengyel/xen.git/commitdiff
xl: Support more than 32 vcpus for xl vcpu-set
authorJuergen Gross <juergen.gross@ts.fujitsu.com>
Mon, 14 Feb 2011 16:56:20 +0000 (16:56 +0000)
committerJuergen Gross <juergen.gross@ts.fujitsu.com>
Mon, 14 Feb 2011 16:56:20 +0000 (16:56 +0000)
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>
tools/libxl/libxl.c
tools/libxl/libxl.h
tools/libxl/xl_cmdimpl.c

index 41db886bd0ff19a45385a2870d03b44d9b69696b..be0e1a075c474512d71b40153cef13ad43d1b16f 100644 (file)
@@ -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;
index f8df389201fc46a145fbc7460eb893c72935e358..20d981dd687494530f8348e0feb8a7cb53002ed6 100644 (file)
@@ -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);
 
index 89540f72e080f3513b5de4e400f84485232233a9..1eebe2ecde8cde1e6db729c6da2d2d61d1b064da 100644 (file)
@@ -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)