• David Hildenbrand's avatar
    mm: enforce pageblock_order < MAX_ORDER · b3d40a2b
    David Hildenbrand authored
    Some places in the kernel don't really expect pageblock_order >=
    MAX_ORDER, and it looks like this is only possible in corner cases:
    
    1) CONFIG_DEFERRED_STRUCT_PAGE_INIT we'll end up freeing pageblock_order
       pages via __free_pages_core(), which cannot possibly work.
    
    2) find_zone_movable_pfns_for_nodes() will roundup the ZONE_MOVABLE
       start PFN to MAX_ORDER_NR_PAGES. Consequently with a bigger
       pageblock_order, we could have a single pageblock partially managed by
       two zones.
    
    3) compaction code runs into __fragmentation_index() with order
       >= MAX_ORDER, when checking WARN_ON_ONCE(order >= MAX_ORDER). [1]
    
    4) mm/page_reporting.c won't be reporting any pages with default
       page_reporting_order == pageblock_order, as we'll be skipping the
       reporting loop inside page_reporting_process_zone().
    
    5) __rmqueue_fallback() will never be able to steal with
       ALLOC_NOFRAGMENT.
    
    pageblock_order >= MAX_ORDER is weird either way: it's a pure
    optimization for making alloc_contig_range(), as used for allcoation of
    gigantic pages, a little more reliable to succeed.  However, if there is
    demand for somewhat reliable allocation of gigantic pages, affected
    setups should be using CMA or boottime allocations instead.
    
    So let's make sure that pageblock_order < MAX_ORDER and simplify.
    
    [1] https://lkml.kernel.org/r/87r189a2ks.fsf@linux.ibm.com
    
    Link: https://lkml.kernel.org/r/20220214174132.219303-3-david@redhat.comSigned-off-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarZi Yan <ziy@nvidia.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Frank Rowand <frowand.list@gmail.com>
    Cc: John Garry via iommu <iommu@lists.linux-foundation.org>
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Rob Herring <robh+dt@kernel.org>
    Cc: Robin Murphy <robin.murphy@arm.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    b3d40a2b
page_alloc.c 265 KB