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
|