[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
On 05/17/2010 06:45 PM, Yang Hongyang wrote: > 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'. > I want it to be signed so I can use -1 as an error indicator. And I want it to be "long long int" rather than int64_t so that the format specifier for printf is unambiguous (since int64_t can be just "long" on a 64-bit machine). J > >> +{ >> + 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 >> >> >> > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |