|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/3] xen/x86: delay parsing of dom0_mem parameter until needed
On 28/11/2018 16:12, Jan Beulich wrote:
>>>> On 22.11.18 at 17:40, <jgross@xxxxxxxx> wrote:
>> Instead of parsing the dom0_mem command line parameter as custom
>> parameter do that only when building dom0. This will enable a later
>> addition of specifying the memory size by fractions of the host memory
>> size, which isn't known when doing custom parameter parsing.
>
> But you don't need to know memory size at the time of parsing. All
> you need to do is store all specified values in __initdata variables
> and do the calculations when available memory is known. The
> reason I'd like to avoid going the route you chose is because ...
Okay, so this would require additional dom0_min_frac, dom0_max_frac and
dom0_frac (or similar). I can change it this way if you like that
better.
>
>> --- a/xen/arch/x86/dom0_build.c
>> +++ b/xen/arch/x86/dom0_build.c
>> @@ -24,6 +24,8 @@ static long __initdata dom0_nrpages;
>> static long __initdata dom0_min_nrpages;
>> static long __initdata dom0_max_nrpages = LONG_MAX;
>>
>> +static char __initdata dom0_mem_par[64];
>
> ... I was really hoping to see go away all such statically dimensioned
> arrays used to store command line pieces. This is even more so since
> I've seen already in patch 2 you feel the need to bump its size.
Uh, the bumping was a leftover from a previous version. But nevertheless
I can understand your concern here.
>
>> @@ -44,14 +46,20 @@ static long __initdata dom0_max_nrpages = LONG_MAX;
>> * If +ve: The specified amount is an absolute value.
>> * If -ve: The specified amount is subtracted from total available memory.
>> */
>> -static long __init parse_amt(const char *s, const char **ps)
>> +static unsigned long __init parse_amt(const char *s, const char **ps,
>> + unsigned long avail)
>> {
>> - long pages = parse_size_and_unit((*s == '-') ? s+1 : s, ps) >>
>> PAGE_SHIFT;
>> - return (*s == '-') ? -pages : pages;
>> + unsigned int minus = (*s == '-') ? 1 : 0;
>> + unsigned long pages = parse_size_and_unit(s + minus, ps) >> PAGE_SHIFT;
>> +
>> + /* Negative specification means "all memory - specified amount". */
>> + return minus ? avail - pages : pages;
>> }
>
> I don't think any of this should be done in a patch with the given
> title.
Going the other route will result in merging patches 1 and 2, I guess.
>
>> @@ -61,16 +69,16 @@ static int __init parse_dom0_mem(const char *s)
>>
>> do {
>> if ( !strncmp(s, "min:", 4) )
>> - dom0_min_nrpages = parse_amt(s+4, &s);
>> + dom0_min_nrpages = parse_amt(s + 4, &s, avail);
>> else if ( !strncmp(s, "max:", 4) )
>> - dom0_max_nrpages = parse_amt(s+4, &s);
>> + dom0_max_nrpages = parse_amt(s + 4, &s, avail);
>> else
>> - dom0_nrpages = parse_amt(s, &s);
>> + dom0_nrpages = parse_amt(s, &s, avail);
>> } while ( *s++ == ',' );
>>
>> return s[-1] ? -EINVAL : 0;
>> }
>> -custom_param("dom0_mem", parse_dom0_mem);
>> +string_param("dom0_mem", dom0_mem_par);
>
> In the event of my objection to the delayed parsing getting overruled:
> This would then belong next to the array. And if the array remained,
> please make the suffix "_param", or even better be consistent with
> other command line option holding variable names and call it
> opt_dom0_mem.
>
>> @@ -298,6 +306,10 @@ unsigned long __init dom0_compute_nr_pages(
>> (!iommu_hap_pt_share || !paging_mode_hap(d));
>> for ( ; ; need_paging = false )
>> {
>> + if ( dom0_mem_par[0] && parse_dom0_mem(avail) )
>> + printk("Invalid dom0_mem parameter value \"%s\", ignoring\n",
>> + dom0_mem_par);
>
> Looking at how the parsing function works I don't think the entire
> command line would necessarily be ignored in case of error. I think
> the log message shouldn't give a wrong impression.
The message is referencing the dom0_mem value only. And this would be
ignored. I don't see your concern here.
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 |