[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] page_alloc: clear nr_bootmem_regions in end_boot_allocator()



On 02/02/17 15:25, Jan Beulich wrote:
> ... to make alloc_boot_pages() fail for late callers. Don't rely on
> reaching the BOOT_BUG_ON(1) near the end of that function though, but
> instead make this situation easier to distinguish from actual
> allocation failures by adding an explicit check.
>
> While there, make the iteration variable unsigned and guard against
> underflow.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -329,13 +329,16 @@ unsigned long __init alloc_boot_pages(
>      unsigned long nr_pfns, unsigned long pfn_align)
>  {
>      unsigned long pg, _e;
> -    int i;
> +    unsigned int i = nr_bootmem_regions;
>  
> -    for ( i = nr_bootmem_regions - 1; i >= 0; i-- )
> +    BOOT_BUG_ON(!nr_bootmem_regions);

Can this just be a plain BUG_ON() to avoid adding further work which
needs to undone for livepatching purposes?

Otherwise, Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

> +
> +    while ( i-- )
>      {
>          struct bootmem_region *r = &bootmem_region_list[i];
> +
>          pg = (r->e - nr_pfns) & ~(pfn_align - 1);
> -        if ( pg < r->s )
> +        if ( pg >= r->e || pg < r->s )
>              continue;
>  
>  #if defined(CONFIG_X86) && !defined(NDEBUG)
> @@ -1352,6 +1355,7 @@ void __init end_boot_allocator(void)
>          if ( r->s < r->e )
>              init_heap_pages(mfn_to_page(r->s), r->e - r->s);
>      }
> +    nr_bootmem_regions = 0;
>      init_heap_pages(virt_to_page(bootmem_region_list), 1);
>  
>      if ( !dma_bitsize && (num_online_nodes() > 1) )
>
>
>


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.