[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xl: allow scaling suffix on memory sizes in mem-set and mem-max
Hi jeremy, On 05/18/2010 08:41 AM, Jeremy Fitzhardinge wrote: > Allow mem-set and mem-max to take 'b', 'k', 'm', 'g' and 't' as scaling > suffixes for bytes, kilobytes, mega, etc. An unadorned number is still > treated as kilobytes so no existing users should be affected. > > Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx> > > diff -r baccadfd9418 tools/libxl/xl_cmdimpl.c > --- a/tools/libxl/xl_cmdimpl.c Fri May 14 08:05:05 2010 +0100 > +++ b/tools/libxl/xl_cmdimpl.c Mon May 17 17:37:56 2010 -0700 > @@ -1200,16 +1200,40 @@ > } > } > > +static long long int parse_mem_size_kb(char *mem) I think here should use 'uint64_t' which is 'unsigned long long' instead of 'long long int'. > +{ > + char *endptr; > + long long int bytes; > + long long int scale = 1024; > + > + bytes = strtoll(mem, &endptr, 10); > + > + if (strlen(endptr) > 1) > + return -1; > + > + switch (*endptr) { > + case '\0': break; > + case 'b': scale = 1; break; > + case 'k': scale = 1024ll; break; > + case 'm': scale = 1024ll * 1024; break; > + case 'g': scale = 1024ll * 1024 * 1024; break; > + case 't': scale = 1024ll * 1024 * 1024 * 1024; break; > + default: > + return -1; > + } > + > + return (bytes * scale) / 1024; > +} > + > int set_memory_max(char *p, char *mem) > { > - char *endptr; > - uint32_t memorykb; > + long long int memorykb; > int rc; > > find_domain(p); > > - memorykb = strtoul(mem, &endptr, 10); > - if (*endptr != '\0') { > + memorykb = parse_mem_size_kb(mem); > + if (memorykb == -1) { > fprintf(stderr, "invalid memory size: %s\n", mem); > exit(3); > } > @@ -1255,17 +1279,18 @@ > > void set_memory_target(char *p, char *mem) > { > - char *endptr; > - uint32_t memorykb; > + long long int memorykb; > > find_domain(p); > > - memorykb = strtoul(mem, &endptr, 10); > - if (*endptr != '\0') { > - fprintf(stderr, "invalid memory size: %s\n", mem); > - exit(3); > + memorykb = parse_mem_size_kb(mem); > + > + if (memorykb == -1) { > + fprintf(stderr, "invalid memory size: %s\n", mem); > + exit(3); > } > - printf("setting domid %d memory to : %d\n", domid, memorykb); > + > + printf("setting domid %d memory to : %lld\n", domid, memorykb); > libxl_set_memory_target(&ctx, domid, memorykb, /* enforce */ 1); > } > > diff -r baccadfd9418 tools/libxl/xl_cmdtable.c > --- a/tools/libxl/xl_cmdtable.c Fri May 14 08:05:05 2010 +0100 > +++ b/tools/libxl/xl_cmdtable.c Mon May 17 17:37:56 2010 -0700 > @@ -110,12 +110,12 @@ > }, > { "mem-max", > &main_memmax, > - "Set the maximum amount reservation for a domain", > + "Set the maximum amount reservation for a domain. Units default to > kilobytes, but can be suffixed with 'b' (bytes), 'k' (KB), 'm' (MB), 'g' (GB) > or 't' (TB)", > "<Domain> <MemKB>", > }, > { "mem-set", > &main_memset, > - "Set the current memory usage for a domain", > + "Set the current memory usage for a domain. Units default to > kilobytes, but can be suffixed with 'b' (bytes), 'k' (KB), 'm' (MB), 'g' (GB) > or 't' (TB)", > "<Domain> <MemKB>", > }, > { "button-press", > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel > > -- Regards Yang Hongyang _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |