On 10/12/2018 15:45, Jan Beulich wrote:
>>>> On 10.12.18 at 12:44, <[email protected]> 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 <[email protected]>
> 
> Once again
> Reviewed-by: Jan Beulich <[email protected]>
> yet once again with a remark:
> 
>> -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 = { };
>> +    unsigned int items = 0;
>> +
>> +    tmp.minus = (*s == '-');
>> +    if ( tmp.minus )
>> +        s++;
>> +
>> +    do
>> +    {
>> +        if ( !isdigit(*s) )
>> +            return -EINVAL;
>> +
>> +        val = parse_size_and_unit(s, ps);
>> +        s = *ps;
>> +        if ( *s == '%' )
>> +        {
>> +            if ( val >= 100 )
>> +                return -EINVAL;
>> +            tmp.percent = val;
>> +            s++;
>> +            items++; /* No other item allowed. */
> 
> Isn't this unnecessary with ...
> 
>> +        }
>> +        else
>> +        {
>> +            /* <size> item must be first one. */
>> +            if ( items )
>> +                return -EINVAL;
>> +            tmp.nr_pages = val >> PAGE_SHIFT;
>> +        }
>> +        items++;
> 
> ... this? However, allowing <frac>%+<size> would apparently have
> been easy (and add further flexibility).

That would require two booleans instead. Otherwise <frac>%+<frac>%
wouldn't be rejected. In case anyone else thinks this would be better
I can change it, of course.


Juergen

_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to