 
	
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/3] xen/x86: add dom0 memory sizing variants
 On 06/12/2018 12:08, Jan Beulich wrote:
>>>> On 06.12.18 at 09:06, <jgross@xxxxxxxx> wrote:
>> Today the memory size of dom0 can be specified only in terms of bytes
>> (either an absolute value or "host-mem - value"). When dom0 shouldn't
>> be auto-ballooned this requires nearly always a manual adaption of the
>> Xen boot parameters to reflect the actual host memory size.
>>
>> Add more possibilities to specify memory sizes. Today we have:
>>
>> dom0_mem= List of ( min:<size> | max:<size> | <size> )
>>
>> with <size> being a positive or negative size value (e.g. 1G).
>>
>> Modify that to:
>>
>> dom0_mem= List of ( min:<sz> | max:<sz> | <sz> )
>> <sz>: <size> | [<size>+]<frac>%
>> <frac>: integer value < 100
>>
>> With the following semantics:
>>
>> <frac>% specifies a fraction of host memory size in percent.
>> <sz> is a percentage of host memory plus an offset.
>>
>> So <sz> being 1G+25% on a 256G host would result in 65G.
>>
>> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> 
> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
> 
> I notice though that ...
> 
>> -static long __init parse_amt(const char *s, const char **ps)
>> +static int __init parse_amt(const char *s, const char **ps, struct memsize 
>> *sz)
>>  {
>> -    long pages = parse_size_and_unit((*s == '-') ? s+1 : s, ps) >> 
>> PAGE_SHIFT;
>> -    return (*s == '-') ? -pages : pages;
>> +    unsigned long val;
>> +    struct memsize tmp = { };
>> +
>> +    tmp.minus = (*s == '-');
>> +    if ( tmp.minus )
>> +        s++;
>> +
>> +    /* Avoid accessing s[-1] in case value starts with '%'. */
>> +    if ( *s == '%' )
>> +        return -EINVAL;
>> +
>> +    while ( isdigit(*s) )
>> +    {
>> +        val = parse_size_and_unit_or_int(s, ps, '%');
>> +        s = *ps;
>> +        if ( *s == '%' )
>> +        {
>> +            if ( !isdigit(s[-1]) || val >= 100 )
>> +                return -EINVAL;
>> +            tmp.percent = val;
>> +            s++;
>> +        }
>> +        else
>> +            tmp.nr_pages = val >> PAGE_SHIFT;
>> +        if ( *s == '+' )
>> +            s++;
>> +    }
> 
> ... you allow more flexibility here than you document (i.e. also
> <percentage>+<basesize>). You may want to consider
> refusing something like 1G+10%+10%, though.
Okay, should be fairly easy.
Can I keep your R-b: with adding something like:
+    bool percent = false;
...
-    while ( isdigit(*s) )
+    while ( isdigit(*s) && !percent )
...
         if ( *s == '%' )
         {
+            percent = true;
...
Juergen
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
 
 
 | 
|  | Lists.xenproject.org is hosted with RackSpace, monitoring our |