• Dan Williams's avatar
    mm: CONFIG_NR_ZONES_EXTENDED · f671c3e6
    Dan Williams authored
    BugLink: http://bugs.launchpad.net/bugs/1534647
    
    ZONE_DEVICE (merged in 4.3) and ZONE_CMA (proposed) are examples of new mm
    zones that are bumping up against the current maximum limit of 4 zones,
    i.e.  2 bits in page->flags.  When adding a zone this equation still needs
    to be satisified:
    
        SECTIONS_WIDTH + ZONES_WIDTH + NODES_SHIFT + LAST_CPUPID_SHIFT
    	  <= BITS_PER_LONG - NR_PAGEFLAGS
    
    ZONE_DEVICE currently tries to satisfy this equation by requiring that
    ZONE_DMA be disabled, but this is untenable given generic kernels want to
    support ZONE_DEVICE and ZONE_DMA simultaneously.  ZONE_CMA would like to
    increase the amount of memory covered per section, but that limits the
    minimum granularity at which consecutive memory ranges can be added via
    devm_memremap_pages().
    
    The trade-off of what is acceptable to sacrifice depends heavily on the
    platform.  For example, ZONE_CMA is targeted for 32-bit platforms where
    page->flags is constrained, but those platforms likely do not care about
    the minimum granularity of memory hotplug.  A big iron machine with 1024
    numa nodes can likely sacrifice ZONE_DMA where a general purpose
    distribution kernel can not.
    
    CONFIG_NR_ZONES_EXTENDED is a configuration symbol that gets selected when
    the number of configured zones exceeds 4.  It documents the configuration
    symbols and definitions that get modified when ZONES_WIDTH is greater than
    2.
    
    For now, it steals a bit from NODES_SHIFT.  Later on it can be used to
    document the definitions that get modified when a 32-bit configuration
    wants more zone bits.
    
    Note that GFP_ZONE_TABLE poses an interesting constraint since
    include/linux/gfp.h gets included by the 32-bit portion of a 64-bit build.
    We need to be careful to only build the table for zones that have a
    corresponding gfp_t flag.  GFP_ZONES_SHIFT is introduced for this purpose.
    This patch does not attempt to solve the problem of adding a new zone
    that also has a corresponding GFP_ flag.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=110931
    Fixes: 033fbae9 ("mm: ZONE_DEVICE for "device memory"")
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Reported-by: default avatarMark <markk@clara.co.uk>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    (cherry picked from linux-next commit 27ffb3827ac71a46e8d52fc7ed7302d33a619d6c)
    Signed-off-by: default avatarTim Gardner <tim.gardner@canonical.com>
    f671c3e6
Kconfig 86.4 KB