[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.