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
|