[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:28, Jan Beulich wrote: >>>> On 06.12.18 at 12:20, <jgross@xxxxxxxx> wrote: >> 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; >> ... > > Something like this, yes. The double percent value was just an > example though, "1G+10%+1G" then too would better either work > as written, or be refused. Okay, I'll modify the patch accordingly and drop your R-b. Juergen > > Jan > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |