• Baoquan He's avatar
    x86: remove unneeded memblock_find_dma_reserve() · fdb022f6
    Baoquan He authored
    Patch series "mm/mm_init.c: refactor free_area_init_core()".
    
    In function free_area_init_core(), the code calculating
    zone->managed_pages and the subtracting dma_reserve from DMA zone looks
    very confusing.
    
    From git history, the code calculating zone->managed_pages was for
    zone->present_pages originally.  The early rough assignment is for
    optimize zone's pcp and water mark setting.  Later, managed_pages was
    introduced into zone to represent the number of managed pages by buddy. 
    Now, zone->managed_pages is zeroed out and reset in mem_init() when
    calling memblock_free_all().  zone's pcp and wmark setting relying on
    actual zone->managed_pages are done later than mem_init() invocation.  So
    we don't need rush to early calculate and set zone->managed_pages, just
    set it as zone->present_pages, will adjust it in mem_init().
    
    And also add a new function calc_nr_kernel_pages() to count up free but
    not reserved pages in memblock, then assign it to nr_all_pages and
    nr_kernel_pages after memmap pages are allocated.
    
    
    This patch (of 6):
    
    Variable dma_reserve and its usage was introduced in commit 0e0b864e
    ("[PATCH] Account for memmap and optionally the kernel image as holes"). 
    Its original purpose was to accounting for the reserved pages in DMA zone
    to make DMA zone's watermarks calculation more accurate on x86.
    
    However, currently there's zone->managed_pages to account for all
    available pages for buddy, zone->present_pages to account for all present
    physical pages in zone.  What is more important, on x86, calculating and
    setting the zone->managed_pages is a temporary move, all zone's
    managed_pages will be zeroed out and reset to the actual value according
    to how many pages are added to buddy allocator in mem_init().  Before
    mem_init(), no buddy alloction is requested.  And zone's pcp and watermark
    setting are all done after mem_init().  So, no need to worry about the DMA
    zone's setting accuracy during free_area_init().
    
    Hence, remove memblock_find_dma_reserve() to stop calculating and
    setting dma_reserve.
    
    Link: https://lkml.kernel.org/r/20240325145646.1044760-1-bhe@redhat.com
    Link: https://lkml.kernel.org/r/20240325145646.1044760-2-bhe@redhat.comSigned-off-by: default avatarBaoquan He <bhe@redhat.com>
    Reviewed-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    fdb022f6
pgtable.h 41.3 KB