|
[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 |