[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1 5/5] xentrace: Implement cpu mask range parsing of human values (-C).
On Wed, Jun 04, 2014 at 06:18:55PM +0100, George Dunlap wrote: > On 06/04/2014 02:44 PM, Konrad Rzeszutek Wilk wrote: > >Instead of just using -c 0x<some hex value> we can > >also use -C <starting cpu>-<end cpu> or -C <cpu1>,<cpu2> > > Would it be better, I wonder, to just try to overload the -c operator, > special-casing "0x[hex]" to use the old interface? Anyone who's currently > using -c should almost certainly be using a hex string there, I should think > -- using decimal would be pretty daft. > > All it would take, I think, would be to check for bytes 0 and 1 being "0x", > and if so, calling strtoul() rather than parse_cpumask_range(). Done. > > [snip] > >@@ -967,6 +970,98 @@ static int parse_cpumask(const char *arg) > > return 0; > > } > > > >+static int parse_cpumask_range(const char *arg) > >+{ > >+ xc_cpumap_t map; > >+ unsigned int a, b, buflen = strlen(arg); > >+ int c, c_old, totaldigits, nmaskbits; > >+ int exp_digit, in_range; > >+ > >+ if ( !buflen ) > >+ { > >+ fprintf(stderr, "Invalid option argument: %s\n", arg); > >+ usage(); /* does exit */ > >+ } > >+ nmaskbits = xc_get_max_cpus(xc_handle); > >+ if ( nmaskbits <= 0 ) > >+ { > >+ fprintf(stderr, "Failed to get max number of CPUs! rc: %d\n", > >nmaskbits); > >+ usage(); > >+ } > >+ map = xc_cpumap_alloc(xc_handle); > >+ if ( !map ) > >+ { > >+ fprintf(stderr, "Out of memory!\n"); > >+ usage(); > >+ } > >+ c = c_old = totaldigits = 0; > >+ do { > >+ exp_digit = 1; > >+ in_range = 0; > >+ a = b = 0; > >+ while ( buflen ) > >+ { > >+ c = *arg++; > >+ buflen--; > >+ > >+ if ( isspace(c) ) > >+ continue; > > Is it possible for this to have a space at the beginning? Doesn't getopt() > take care of that? Yes. If the user does something like this: -c " 0xff" > > >+ > >+ if ( totaldigits && c && isspace(c_old) ) > > c_old doesn't seem to be set anywhere after it's initialized above. Fixed > > >+ { > >+ fprintf(stderr, "No embedded whitespaces allowed in: %s\n", > >arg); > >+ goto err_out; > >+ } > >+ > >+ /* A '\0' or a ',' signal the end of a cpu# or range */ > >+ if ( c == '\0' || c == ',' ) > >+ break; > >+ > >+ if ( c == '-' ) > >+ { > >+ if ( exp_digit || in_range ) > >+ goto err_out; > > Isn't exp_digit a bit redundant, as if "in_range" is 1, "exp_digit" will > also always be 1? Fixed. > > Everything else looks reasonable. OK, posting a patch shortly > > -George > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |