[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 4/5] xl: implement and enable dryrun mode for `xl vcpu-pin'
On Fri, Sep 06, 2013 at 05:55:53PM +0200, Dario Faggioli wrote: > As it can be useful to see whetehr the outcome of some complex "whether", though "if" is a better word choice. > vCPU pinning bitmap specification looks as expected. > > This also allow for the introduction of some automatic testing > and verification for the bitmap parsing code, as it happens > already in check-xl-disk-parse and check-xl-vif-parse. > > In particular, to make the above possible, this commit also > changes the implementation of the vcpu-pin command so that, > instead of always returning 0, it returns an error if the > parsing fails. > > Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> > --- > tools/libxl/xl_cmdimpl.c | 46 > ++++++++++++++++++++++++++++++++++----------- > tools/libxl/xl_cmdtable.c | 2 +- > 2 files changed, 36 insertions(+), 12 deletions(-) > > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index da6a6df..eb99231 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -4534,30 +4534,54 @@ int main_vcpulist(int argc, char **argv) > return 0; > } > > -static void vcpupin(uint32_t domid, const char *vcpu, char *cpu) > +static int vcpupin(uint32_t domid, const char *vcpu, char *cpu) > { > libxl_vcpuinfo *vcpuinfo; > libxl_bitmap cpumap; > > uint32_t vcpuid; > char *endptr; > - int i, nb_vcpu; > + int i, nb_vcpu, rc = -1; > + > + libxl_bitmap_init(&cpumap); > > vcpuid = strtoul(vcpu, &endptr, 10); > if (vcpu == endptr) { > if (strcmp(vcpu, "all")) { > fprintf(stderr, "Error: Invalid argument.\n"); > - return; > + goto out; > } > vcpuid = -1; > } > > if (libxl_cpu_bitmap_alloc(ctx, &cpumap, 0)) { > - goto vcpupin_out; > + goto out; > } > > if (vcpupin_parse(cpu, &cpumap)) > - goto vcpupin_out1; > + goto out; > + > + if (dryrun_only) { > + libxl_cputopology *info = libxl_get_cpu_topology(ctx, &i); > + > + if (!info) { > + fprintf(stderr, "libxl_list_vcpu failed.\n"); > + goto out; > + } > + libxl_cputopology_list_free(info, i); > + > + fprintf(stdout, "cpumap: "); > + print_cpumap(cpumap.map, i, stdout); > + fprintf(stdout, "\n"); > + > + if (ferror(stdout) || fflush(stdout)) { > + perror("stdout"); > + exit(-1); > + } > + > + rc = 0; > + goto out; > + } > > if (vcpuid != -1) { > if (libxl_set_vcpuaffinity(ctx, domid, vcpuid, &cpumap) == -1) { > @@ -4567,7 +4591,7 @@ static void vcpupin(uint32_t domid, const char *vcpu, > char *cpu) > else { > if (!(vcpuinfo = libxl_list_vcpu(ctx, domid, &nb_vcpu, &i))) { > fprintf(stderr, "libxl_list_vcpu failed.\n"); > - goto vcpupin_out1; > + goto out; > } > for (i = 0; i < nb_vcpu; i++) { > if (libxl_set_vcpuaffinity(ctx, domid, vcpuinfo[i].vcpuid, > @@ -4578,10 +4602,11 @@ static void vcpupin(uint32_t domid, const char *vcpu, > char *cpu) > } > libxl_vcpuinfo_list_free(vcpuinfo, nb_vcpu); > } > - vcpupin_out1: > + > + rc = 0; > + out: > libxl_bitmap_dispose(&cpumap); > - vcpupin_out: > - ; > + return rc; > } > > int main_vcpupin(int argc, char **argv) > @@ -4592,8 +4617,7 @@ int main_vcpupin(int argc, char **argv) > /* No options */ > } > > - vcpupin(find_domain(argv[optind]), argv[optind+1] , argv[optind+2]); > - return 0; > + return vcpupin(find_domain(argv[optind]), argv[optind+1] , > argv[optind+2]); > } > > static void vcpuset(uint32_t domid, const char* nr_vcpus, int check_host) > diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c > index 326a660..d3dcbf0 100644 > --- a/tools/libxl/xl_cmdtable.c > +++ b/tools/libxl/xl_cmdtable.c > @@ -211,7 +211,7 @@ struct cmd_spec cmd_table[] = { > "[Domain, ...]", > }, > { "vcpu-pin", > - &main_vcpupin, 0, 1, > + &main_vcpupin, 1, 1, > "Set which CPUs a VCPU can use", > "<Domain> <VCPU|all> <CPUs|all>", > }, > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |