linux/mm/Kconfig
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0-only
   2
   3menu "Memory Management options"
   4
   5config SELECT_MEMORY_MODEL
   6        def_bool y
   7        depends on ARCH_SELECT_MEMORY_MODEL
   8
   9choice
  10        prompt "Memory model"
  11        depends on SELECT_MEMORY_MODEL
  12        default SPARSEMEM_MANUAL if ARCH_SPARSEMEM_DEFAULT
  13        default FLATMEM_MANUAL
  14        help
  15          This option allows you to change some of the ways that
  16          Linux manages its memory internally. Most users will
  17          only have one option here selected by the architecture
  18          configuration. This is normal.
  19
  20config FLATMEM_MANUAL
  21        bool "Flat Memory"
  22        depends on !ARCH_SPARSEMEM_ENABLE || ARCH_FLATMEM_ENABLE
  23        help
  24          This option is best suited for non-NUMA systems with
  25          flat address space. The FLATMEM is the most efficient
  26          system in terms of performance and resource consumption
  27          and it is the best option for smaller systems.
  28
  29          For systems that have holes in their physical address
  30          spaces and for features like NUMA and memory hotplug,
  31          choose "Sparse Memory".
  32
  33          If unsure, choose this option (Flat Memory) over any other.
  34
  35config SPARSEMEM_MANUAL
  36        bool "Sparse Memory"
  37        depends on ARCH_SPARSEMEM_ENABLE
  38        help
  39          This will be the only option for some systems, including
  40          memory hot-plug systems.  This is normal.
  41
  42          This option provides efficient support for systems with
  43          holes is their physical address space and allows memory
  44          hot-plug and hot-remove.
  45
  46          If unsure, choose "Flat Memory" over this option.
  47
  48endchoice
  49
  50config SPARSEMEM
  51        def_bool y
  52        depends on (!SELECT_MEMORY_MODEL && ARCH_SPARSEMEM_ENABLE) || SPARSEMEM_MANUAL
  53
  54config FLATMEM
  55        def_bool y
  56        depends on !SPARSEMEM || FLATMEM_MANUAL
  57
  58#
  59# SPARSEMEM_EXTREME (which is the default) does some bootmem
  60# allocations when sparse_init() is called.  If this cannot
  61# be done on your architecture, select this option.  However,
  62# statically allocating the mem_section[] array can potentially
  63# consume vast quantities of .bss, so be careful.
  64#
  65# This option will also potentially produce smaller runtime code
  66# with gcc 3.4 and later.
  67#
  68config SPARSEMEM_STATIC
  69        bool
  70
  71#
  72# Architecture platforms which require a two level mem_section in SPARSEMEM
  73# must select this option. This is usually for architecture platforms with
  74# an extremely sparse physical address space.
  75#
  76config SPARSEMEM_EXTREME
  77        def_bool y
  78        depends on SPARSEMEM && !SPARSEMEM_STATIC
  79
  80config SPARSEMEM_VMEMMAP_ENABLE
  81        bool
  82
  83config SPARSEMEM_VMEMMAP
  84        bool "Sparse Memory virtual memmap"
  85        depends on SPARSEMEM && SPARSEMEM_VMEMMAP_ENABLE
  86        default y
  87        help
  88          SPARSEMEM_VMEMMAP uses a virtually mapped memmap to optimise
  89          pfn_to_page and page_to_pfn operations.  This is the most
  90          efficient option when sufficient kernel resources are available.
  91
  92config HAVE_MEMBLOCK_PHYS_MAP
  93        bool
  94
  95config HAVE_FAST_GUP
  96        depends on MMU
  97        bool
  98
  99# Don't discard allocated memory used to track "memory" and "reserved" memblocks
 100# after early boot, so it can still be used to test for validity of memory.
 101# Also, memblocks are updated with memory hot(un)plug.
 102config ARCH_KEEP_MEMBLOCK
 103        bool
 104
 105# Keep arch NUMA mapping infrastructure post-init.
 106config NUMA_KEEP_MEMINFO
 107        bool
 108
 109config MEMORY_ISOLATION
 110        bool
 111
 112#
 113# Only be set on architectures that have completely implemented memory hotplug
 114# feature. If you are not sure, don't touch it.
 115#
 116config HAVE_BOOTMEM_INFO_NODE
 117        def_bool n
 118
 119config ARCH_ENABLE_MEMORY_HOTPLUG
 120        bool
 121
 122# eventually, we can have this option just 'select SPARSEMEM'
 123config MEMORY_HOTPLUG
 124        bool "Allow for memory hot-add"
 125        select MEMORY_ISOLATION
 126        depends on SPARSEMEM || X86_64_ACPI_NUMA
 127        depends on ARCH_ENABLE_MEMORY_HOTPLUG
 128        depends on 64BIT || BROKEN
 129        select NUMA_KEEP_MEMINFO if NUMA
 130
 131config MEMORY_HOTPLUG_SPARSE
 132        def_bool y
 133        depends on SPARSEMEM && MEMORY_HOTPLUG
 134
 135config MEMORY_HOTPLUG_DEFAULT_ONLINE
 136        bool "Online the newly added memory blocks by default"
 137        depends on MEMORY_HOTPLUG
 138        help
 139          This option sets the default policy setting for memory hotplug
 140          onlining policy (/sys/devices/system/memory/auto_online_blocks) which
 141          determines what happens to newly added memory regions. Policy setting
 142          can always be changed at runtime.
 143          See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
 144
 145          Say Y here if you want all hot-plugged memory blocks to appear in
 146          'online' state by default.
 147          Say N here if you want the default policy to keep all hot-plugged
 148          memory blocks in 'offline' state.
 149
 150config ARCH_ENABLE_MEMORY_HOTREMOVE
 151        bool
 152
 153config MEMORY_HOTREMOVE
 154        bool "Allow for memory hot remove"
 155        select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
 156        depends on MEMORY_HOTPLUG && ARCH_ENABLE_MEMORY_HOTREMOVE
 157        depends on MIGRATION
 158
 159config MHP_MEMMAP_ON_MEMORY
 160        def_bool y
 161        depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
 162        depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
 163
 164# Heavily threaded applications may benefit from splitting the mm-wide
 165# page_table_lock, so that faults on different parts of the user address
 166# space can be handled with less contention: split it at this NR_CPUS.
 167# Default to 4 for wider testing, though 8 might be more appropriate.
 168# ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
 169# PA-RISC 7xxx's spinlock_t would enlarge struct page from 32 to 44 bytes.
 170# SPARC32 allocates multiple pte tables within a single page, and therefore
 171# a per-page lock leads to problems when multiple tables need to be locked
 172# at the same time (e.g. copy_page_range()).
 173# DEBUG_SPINLOCK and DEBUG_LOCK_ALLOC spinlock_t also enlarge struct page.
 174#
 175config SPLIT_PTLOCK_CPUS
 176        int
 177        default "999999" if !MMU
 178        default "999999" if ARM && !CPU_CACHE_VIPT
 179        default "999999" if PARISC && !PA20
 180        default "999999" if SPARC32
 181        default "4"
 182
 183config ARCH_ENABLE_SPLIT_PMD_PTLOCK
 184        bool
 185
 186#
 187# support for memory balloon
 188config MEMORY_BALLOON
 189        bool
 190
 191#
 192# support for memory balloon compaction
 193config BALLOON_COMPACTION
 194        bool "Allow for balloon memory compaction/migration"
 195        def_bool y
 196        depends on COMPACTION && MEMORY_BALLOON
 197        help
 198          Memory fragmentation introduced by ballooning might reduce
 199          significantly the number of 2MB contiguous memory blocks that can be
 200          used within a guest, thus imposing performance penalties associated
 201          with the reduced number of transparent huge pages that could be used
 202          by the guest workload. Allowing the compaction & migration for memory
 203          pages enlisted as being part of memory balloon devices avoids the
 204          scenario aforementioned and helps improving memory defragmentation.
 205
 206#
 207# support for memory compaction
 208config COMPACTION
 209        bool "Allow for memory compaction"
 210        def_bool y
 211        select MIGRATION
 212        depends on MMU
 213        help
 214          Compaction is the only memory management component to form
 215          high order (larger physically contiguous) memory blocks
 216          reliably. The page allocator relies on compaction heavily and
 217          the lack of the feature can lead to unexpected OOM killer
 218          invocations for high order memory requests. You shouldn't
 219          disable this option unless there really is a strong reason for
 220          it and then we would be really interested to hear about that at
 221          linux-mm@kvack.org.
 222
 223#
 224# support for free page reporting
 225config PAGE_REPORTING
 226        bool "Free page reporting"
 227        def_bool n
 228        help
 229          Free page reporting allows for the incremental acquisition of
 230          free pages from the buddy allocator for the purpose of reporting
 231          those pages to another entity, such as a hypervisor, so that the
 232          memory can be freed within the host for other uses.
 233
 234#
 235# support for page migration
 236#
 237config MIGRATION
 238        bool "Page migration"
 239        def_bool y
 240        depends on (NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION || CMA) && MMU
 241        help
 242          Allows the migration of the physical location of pages of processes
 243          while the virtual addresses are not changed. This is useful in
 244          two situations. The first is on NUMA systems to put pages nearer
 245          to the processors accessing. The second is when allocating huge
 246          pages as migration can relocate pages to satisfy a huge page
 247          allocation instead of reclaiming.
 248
 249config ARCH_ENABLE_HUGEPAGE_MIGRATION
 250        bool
 251
 252config ARCH_ENABLE_THP_MIGRATION
 253        bool
 254
 255config HUGETLB_PAGE_SIZE_VARIABLE
 256        def_bool n
 257        help
 258          Allows the pageblock_order value to be dynamic instead of just standard
 259          HUGETLB_PAGE_ORDER when there are multiple HugeTLB page sizes available
 260          on a platform.
 261
 262config CONTIG_ALLOC
 263        def_bool (MEMORY_ISOLATION && COMPACTION) || CMA
 264
 265config PHYS_ADDR_T_64BIT
 266        def_bool 64BIT
 267
 268config BOUNCE
 269        bool "Enable bounce buffers"
 270        default y
 271        depends on BLOCK && MMU && HIGHMEM
 272        help
 273          Enable bounce buffers for devices that cannot access the full range of
 274          memory available to the CPU. Enabled by default when HIGHMEM is
 275          selected, but you may say n to override this.
 276
 277config VIRT_TO_BUS
 278        bool
 279        help
 280          An architecture should select this if it implements the
 281          deprecated interface virt_to_bus().  All new architectures
 282          should probably not select this.
 283
 284
 285config MMU_NOTIFIER
 286        bool
 287        select SRCU
 288        select INTERVAL_TREE
 289
 290config KSM
 291        bool "Enable KSM for page merging"
 292        depends on MMU
 293        select XXHASH
 294        help
 295          Enable Kernel Samepage Merging: KSM periodically scans those areas
 296          of an application's address space that an app has advised may be
 297          mergeable.  When it finds pages of identical content, it replaces
 298          the many instances by a single page with that content, so
 299          saving memory until one or another app needs to modify the content.
 300          Recommended for use with KVM, or with other duplicative applications.
 301          See Documentation/vm/ksm.rst for more information: KSM is inactive
 302          until a program has madvised that an area is MADV_MERGEABLE, and
 303          root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
 304
 305config DEFAULT_MMAP_MIN_ADDR
 306        int "Low address space to protect from user allocation"
 307        depends on MMU
 308        default 4096
 309        help
 310          This is the portion of low virtual memory which should be protected
 311          from userspace allocation.  Keeping a user from writing to low pages
 312          can help reduce the impact of kernel NULL pointer bugs.
 313
 314          For most ia64, ppc64 and x86 users with lots of address space
 315          a value of 65536 is reasonable and should cause no problems.
 316          On arm and other archs it should not be higher than 32768.
 317          Programs which use vm86 functionality or have some need to map
 318          this low address space will need CAP_SYS_RAWIO or disable this
 319          protection by setting the value to 0.
 320
 321          This value can be changed after boot using the
 322          /proc/sys/vm/mmap_min_addr tunable.
 323
 324config ARCH_SUPPORTS_MEMORY_FAILURE
 325        bool
 326
 327config MEMORY_FAILURE
 328        depends on MMU
 329        depends on ARCH_SUPPORTS_MEMORY_FAILURE
 330        bool "Enable recovery from hardware memory errors"
 331        select MEMORY_ISOLATION
 332        select RAS
 333        help
 334          Enables code to recover from some memory failures on systems
 335          with MCA recovery. This allows a system to continue running
 336          even when some of its memory has uncorrected errors. This requires
 337          special hardware support and typically ECC memory.
 338
 339config HWPOISON_INJECT
 340        tristate "HWPoison pages injector"
 341        depends on MEMORY_FAILURE && DEBUG_KERNEL && PROC_FS
 342        select PROC_PAGE_MONITOR
 343
 344config NOMMU_INITIAL_TRIM_EXCESS
 345        int "Turn on mmap() excess space trimming before booting"
 346        depends on !MMU
 347        default 1
 348        help
 349          The NOMMU mmap() frequently needs to allocate large contiguous chunks
 350          of memory on which to store mappings, but it can only ask the system
 351          allocator for chunks in 2^N*PAGE_SIZE amounts - which is frequently
 352          more than it requires.  To deal with this, mmap() is able to trim off
 353          the excess and return it to the allocator.
 354
 355          If trimming is enabled, the excess is trimmed off and returned to the
 356          system allocator, which can cause extra fragmentation, particularly
 357          if there are a lot of transient processes.
 358
 359          If trimming is disabled, the excess is kept, but not used, which for
 360          long-term mappings means that the space is wasted.
 361
 362          Trimming can be dynamically controlled through a sysctl option
 363          (/proc/sys/vm/nr_trim_pages) which specifies the minimum number of
 364          excess pages there must be before trimming should occur, or zero if
 365          no trimming is to occur.
 366
 367          This option specifies the initial value of this option.  The default
 368          of 1 says that all excess pages should be trimmed.
 369
 370          See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
 371
 372config TRANSPARENT_HUGEPAGE
 373        bool "Transparent Hugepage Support"
 374        depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE
 375        select COMPACTION
 376        select XARRAY_MULTI
 377        help
 378          Transparent Hugepages allows the kernel to use huge pages and
 379          huge tlb transparently to the applications whenever possible.
 380          This feature can improve computing performance to certain
 381          applications by speeding up page faults during memory
 382          allocation, by reducing the number of tlb misses and by speeding
 383          up the pagetable walking.
 384
 385          If memory constrained on embedded, you may want to say N.
 386
 387choice
 388        prompt "Transparent Hugepage Support sysfs defaults"
 389        depends on TRANSPARENT_HUGEPAGE
 390        default TRANSPARENT_HUGEPAGE_ALWAYS
 391        help
 392          Selects the sysfs defaults for Transparent Hugepage Support.
 393
 394        config TRANSPARENT_HUGEPAGE_ALWAYS
 395                bool "always"
 396        help
 397          Enabling Transparent Hugepage always, can increase the
 398          memory footprint of applications without a guaranteed
 399          benefit but it will work automatically for all applications.
 400
 401        config TRANSPARENT_HUGEPAGE_MADVISE
 402                bool "madvise"
 403        help
 404          Enabling Transparent Hugepage madvise, will only provide a
 405          performance improvement benefit to the applications using
 406          madvise(MADV_HUGEPAGE) but it won't risk to increase the
 407          memory footprint of applications without a guaranteed
 408          benefit.
 409endchoice
 410
 411config ARCH_WANTS_THP_SWAP
 412        def_bool n
 413
 414config THP_SWAP
 415        def_bool y
 416        depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP
 417        help
 418          Swap transparent huge pages in one piece, without splitting.
 419          XXX: For now, swap cluster backing transparent huge page
 420          will be split after swapout.
 421
 422          For selection by architectures with reasonable THP sizes.
 423
 424#
 425# UP and nommu archs use km based percpu allocator
 426#
 427config NEED_PER_CPU_KM
 428        depends on !SMP
 429        bool
 430        default y
 431
 432config CLEANCACHE
 433        bool "Enable cleancache driver to cache clean pages if tmem is present"
 434        help
 435          Cleancache can be thought of as a page-granularity victim cache
 436          for clean pages that the kernel's pageframe replacement algorithm
 437          (PFRA) would like to keep around, but can't since there isn't enough
 438          memory.  So when the PFRA "evicts" a page, it first attempts to use
 439          cleancache code to put the data contained in that page into
 440          "transcendent memory", memory that is not directly accessible or
 441          addressable by the kernel and is of unknown and possibly
 442          time-varying size.  And when a cleancache-enabled
 443          filesystem wishes to access a page in a file on disk, it first
 444          checks cleancache to see if it already contains it; if it does,
 445          the page is copied into the kernel and a disk access is avoided.
 446          When a transcendent memory driver is available (such as zcache or
 447          Xen transcendent memory), a significant I/O reduction
 448          may be achieved.  When none is available, all cleancache calls
 449          are reduced to a single pointer-compare-against-NULL resulting
 450          in a negligible performance hit.
 451
 452          If unsure, say Y to enable cleancache
 453
 454config FRONTSWAP
 455        bool "Enable frontswap to cache swap pages if tmem is present"
 456        depends on SWAP
 457        help
 458          Frontswap is so named because it can be thought of as the opposite
 459          of a "backing" store for a swap device.  The data is stored into
 460          "transcendent memory", memory that is not directly accessible or
 461          addressable by the kernel and is of unknown and possibly
 462          time-varying size.  When space in transcendent memory is available,
 463          a significant swap I/O reduction may be achieved.  When none is
 464          available, all frontswap calls are reduced to a single pointer-
 465          compare-against-NULL resulting in a negligible performance hit
 466          and swap data is stored as normal on the matching swap device.
 467
 468          If unsure, say Y to enable frontswap.
 469
 470config CMA
 471        bool "Contiguous Memory Allocator"
 472        depends on MMU
 473        select MIGRATION
 474        select MEMORY_ISOLATION
 475        help
 476          This enables the Contiguous Memory Allocator which allows other
 477          subsystems to allocate big physically-contiguous blocks of memory.
 478          CMA reserves a region of memory and allows only movable pages to
 479          be allocated from it. This way, the kernel can use the memory for
 480          pagecache and when a subsystem requests for contiguous area, the
 481          allocated pages are migrated away to serve the contiguous request.
 482
 483          If unsure, say "n".
 484
 485config CMA_DEBUG
 486        bool "CMA debug messages (DEVELOPMENT)"
 487        depends on DEBUG_KERNEL && CMA
 488        help
 489          Turns on debug messages in CMA.  This produces KERN_DEBUG
 490          messages for every CMA call as well as various messages while
 491          processing calls such as dma_alloc_from_contiguous().
 492          This option does not affect warning and error messages.
 493
 494config CMA_DEBUGFS
 495        bool "CMA debugfs interface"
 496        depends on CMA && DEBUG_FS
 497        help
 498          Turns on the DebugFS interface for CMA.
 499
 500config CMA_SYSFS
 501        bool "CMA information through sysfs interface"
 502        depends on CMA && SYSFS
 503        help
 504          This option exposes some sysfs attributes to get information
 505          from CMA.
 506
 507config CMA_AREAS
 508        int "Maximum count of the CMA areas"
 509        depends on CMA
 510        default 19 if NUMA
 511        default 7
 512        help
 513          CMA allows to create CMA areas for particular purpose, mainly,
 514          used as device private area. This parameter sets the maximum
 515          number of CMA area in the system.
 516
 517          If unsure, leave the default value "7" in UMA and "19" in NUMA.
 518
 519config MEM_SOFT_DIRTY
 520        bool "Track memory changes"
 521        depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS
 522        select PROC_PAGE_MONITOR
 523        help
 524          This option enables memory changes tracking by introducing a
 525          soft-dirty bit on pte-s. This bit it set when someone writes
 526          into a page just as regular dirty bit, but unlike the latter
 527          it can be cleared by hands.
 528
 529          See Documentation/admin-guide/mm/soft-dirty.rst for more details.
 530
 531config ZSWAP
 532        bool "Compressed cache for swap pages (EXPERIMENTAL)"
 533        depends on FRONTSWAP && CRYPTO=y
 534        select ZPOOL
 535        help
 536          A lightweight compressed cache for swap pages.  It takes
 537          pages that are in the process of being swapped out and attempts to
 538          compress them into a dynamically allocated RAM-based memory pool.
 539          This can result in a significant I/O reduction on swap device and,
 540          in the case where decompressing from RAM is faster that swap device
 541          reads, can also improve workload performance.
 542
 543          This is marked experimental because it is a new feature (as of
 544          v3.11) that interacts heavily with memory reclaim.  While these
 545          interactions don't cause any known issues on simple memory setups,
 546          they have not be fully explored on the large set of potential
 547          configurations and workloads that exist.
 548
 549choice
 550        prompt "Compressed cache for swap pages default compressor"
 551        depends on ZSWAP
 552        default ZSWAP_COMPRESSOR_DEFAULT_LZO
 553        help
 554          Selects the default compression algorithm for the compressed cache
 555          for swap pages.
 556
 557          For an overview what kind of performance can be expected from
 558          a particular compression algorithm please refer to the benchmarks
 559          available at the following LWN page:
 560          https://lwn.net/Articles/751795/
 561
 562          If in doubt, select 'LZO'.
 563
 564          The selection made here can be overridden by using the kernel
 565          command line 'zswap.compressor=' option.
 566
 567config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
 568        bool "Deflate"
 569        select CRYPTO_DEFLATE
 570        help
 571          Use the Deflate algorithm as the default compression algorithm.
 572
 573config ZSWAP_COMPRESSOR_DEFAULT_LZO
 574        bool "LZO"
 575        select CRYPTO_LZO
 576        help
 577          Use the LZO algorithm as the default compression algorithm.
 578
 579config ZSWAP_COMPRESSOR_DEFAULT_842
 580        bool "842"
 581        select CRYPTO_842
 582        help
 583          Use the 842 algorithm as the default compression algorithm.
 584
 585config ZSWAP_COMPRESSOR_DEFAULT_LZ4
 586        bool "LZ4"
 587        select CRYPTO_LZ4
 588        help
 589          Use the LZ4 algorithm as the default compression algorithm.
 590
 591config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
 592        bool "LZ4HC"
 593        select CRYPTO_LZ4HC
 594        help
 595          Use the LZ4HC algorithm as the default compression algorithm.
 596
 597config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
 598        bool "zstd"
 599        select CRYPTO_ZSTD
 600        help
 601          Use the zstd algorithm as the default compression algorithm.
 602endchoice
 603
 604config ZSWAP_COMPRESSOR_DEFAULT
 605       string
 606       depends on ZSWAP
 607       default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
 608       default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
 609       default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
 610       default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
 611       default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
 612       default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
 613       default ""
 614
 615choice
 616        prompt "Compressed cache for swap pages default allocator"
 617        depends on ZSWAP
 618        default ZSWAP_ZPOOL_DEFAULT_ZBUD
 619        help
 620          Selects the default allocator for the compressed cache for
 621          swap pages.
 622          The default is 'zbud' for compatibility, however please do
 623          read the description of each of the allocators below before
 624          making a right choice.
 625
 626          The selection made here can be overridden by using the kernel
 627          command line 'zswap.zpool=' option.
 628
 629config ZSWAP_ZPOOL_DEFAULT_ZBUD
 630        bool "zbud"
 631        select ZBUD
 632        help
 633          Use the zbud allocator as the default allocator.
 634
 635config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
 636        bool "z3fold"
 637        select Z3FOLD
 638        help
 639          Use the z3fold allocator as the default allocator.
 640
 641config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
 642        bool "zsmalloc"
 643        select ZSMALLOC
 644        help
 645          Use the zsmalloc allocator as the default allocator.
 646endchoice
 647
 648config ZSWAP_ZPOOL_DEFAULT
 649       string
 650       depends on ZSWAP
 651       default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
 652       default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
 653       default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
 654       default ""
 655
 656config ZSWAP_DEFAULT_ON
 657        bool "Enable the compressed cache for swap pages by default"
 658        depends on ZSWAP
 659        help
 660          If selected, the compressed cache for swap pages will be enabled
 661          at boot, otherwise it will be disabled.
 662
 663          The selection made here can be overridden by using the kernel
 664          command line 'zswap.enabled=' option.
 665
 666config ZPOOL
 667        tristate "Common API for compressed memory storage"
 668        help
 669          Compressed memory storage API.  This allows using either zbud or
 670          zsmalloc.
 671
 672config ZBUD
 673        tristate "Low (Up to 2x) density storage for compressed pages"
 674        depends on ZPOOL
 675        help
 676          A special purpose allocator for storing compressed pages.
 677          It is designed to store up to two compressed pages per physical
 678          page.  While this design limits storage density, it has simple and
 679          deterministic reclaim properties that make it preferable to a higher
 680          density approach when reclaim will be used.
 681
 682config Z3FOLD
 683        tristate "Up to 3x density storage for compressed pages"
 684        depends on ZPOOL
 685        help
 686          A special purpose allocator for storing compressed pages.
 687          It is designed to store up to three compressed pages per physical
 688          page. It is a ZBUD derivative so the simplicity and determinism are
 689          still there.
 690
 691config ZSMALLOC
 692        tristate "Memory allocator for compressed pages"
 693        depends on MMU
 694        help
 695          zsmalloc is a slab-based memory allocator designed to store
 696          compressed RAM pages.  zsmalloc uses virtual memory mapping
 697          in order to reduce fragmentation.  However, this results in a
 698          non-standard allocator interface where a handle, not a pointer, is
 699          returned by an alloc().  This handle must be mapped in order to
 700          access the allocated space.
 701
 702config ZSMALLOC_STAT
 703        bool "Export zsmalloc statistics"
 704        depends on ZSMALLOC
 705        select DEBUG_FS
 706        help
 707          This option enables code in the zsmalloc to collect various
 708          statistics about what's happening in zsmalloc and exports that
 709          information to userspace via debugfs.
 710          If unsure, say N.
 711
 712config GENERIC_EARLY_IOREMAP
 713        bool
 714
 715config STACK_MAX_DEFAULT_SIZE_MB
 716        int "Default maximum user stack size for 32-bit processes (MB)"
 717        default 100
 718        range 8 2048
 719        depends on STACK_GROWSUP && (!64BIT || COMPAT)
 720        help
 721          This is the maximum stack size in Megabytes in the VM layout of 32-bit
 722          user processes when the stack grows upwards (currently only on parisc
 723          arch) when the RLIMIT_STACK hard limit is unlimited.
 724
 725          A sane initial value is 100 MB.
 726
 727config DEFERRED_STRUCT_PAGE_INIT
 728        bool "Defer initialisation of struct pages to kthreads"
 729        depends on SPARSEMEM
 730        depends on !NEED_PER_CPU_KM
 731        depends on 64BIT
 732        select PADATA
 733        help
 734          Ordinarily all struct pages are initialised during early boot in a
 735          single thread. On very large machines this can take a considerable
 736          amount of time. If this option is set, large machines will bring up
 737          a subset of memmap at boot and then initialise the rest in parallel.
 738          This has a potential performance impact on tasks running early in the
 739          lifetime of the system until these kthreads finish the
 740          initialisation.
 741
 742config PAGE_IDLE_FLAG
 743        bool
 744        select PAGE_EXTENSION if !64BIT
 745        help
 746          This adds PG_idle and PG_young flags to 'struct page'.  PTE Accessed
 747          bit writers can set the state of the bit in the flags so that PTE
 748          Accessed bit readers may avoid disturbance.
 749
 750config IDLE_PAGE_TRACKING
 751        bool "Enable idle page tracking"
 752        depends on SYSFS && MMU
 753        select PAGE_IDLE_FLAG
 754        help
 755          This feature allows to estimate the amount of user pages that have
 756          not been touched during a given period of time. This information can
 757          be useful to tune memory cgroup limits and/or for job placement
 758          within a compute cluster.
 759
 760          See Documentation/admin-guide/mm/idle_page_tracking.rst for
 761          more details.
 762
 763config ARCH_HAS_CACHE_LINE_SIZE
 764        bool
 765
 766config ARCH_HAS_PTE_DEVMAP
 767        bool
 768
 769config ARCH_HAS_ZONE_DMA_SET
 770        bool
 771
 772config ZONE_DMA
 773        bool "Support DMA zone" if ARCH_HAS_ZONE_DMA_SET
 774        default y if ARM64 || X86
 775
 776config ZONE_DMA32
 777        bool "Support DMA32 zone" if ARCH_HAS_ZONE_DMA_SET
 778        depends on !X86_32
 779        default y if ARM64
 780
 781config ZONE_DEVICE
 782        bool "Device memory (pmem, HMM, etc...) hotplug support"
 783        depends on MEMORY_HOTPLUG
 784        depends on MEMORY_HOTREMOVE
 785        depends on SPARSEMEM_VMEMMAP
 786        depends on ARCH_HAS_PTE_DEVMAP
 787        select XARRAY_MULTI
 788
 789        help
 790          Device memory hotplug support allows for establishing pmem,
 791          or other device driver discovered memory regions, in the
 792          memmap. This allows pfn_to_page() lookups of otherwise
 793          "device-physical" addresses which is needed for using a DAX
 794          mapping in an O_DIRECT operation, among other things.
 795
 796          If FS_DAX is enabled, then say Y.
 797
 798config DEV_PAGEMAP_OPS
 799        bool
 800
 801#
 802# Helpers to mirror range of the CPU page tables of a process into device page
 803# tables.
 804#
 805config HMM_MIRROR
 806        bool
 807        depends on MMU
 808
 809config DEVICE_PRIVATE
 810        bool "Unaddressable device memory (GPU memory, ...)"
 811        depends on ZONE_DEVICE
 812        select DEV_PAGEMAP_OPS
 813
 814        help
 815          Allows creation of struct pages to represent unaddressable device
 816          memory; i.e., memory that is only accessible from the device (or
 817          group of devices). You likely also want to select HMM_MIRROR.
 818
 819config VMAP_PFN
 820        bool
 821
 822config ARCH_USES_HIGH_VMA_FLAGS
 823        bool
 824config ARCH_HAS_PKEYS
 825        bool
 826
 827config PERCPU_STATS
 828        bool "Collect percpu memory statistics"
 829        help
 830          This feature collects and exposes statistics via debugfs. The
 831          information includes global and per chunk statistics, which can
 832          be used to help understand percpu memory usage.
 833
 834config GUP_TEST
 835        bool "Enable infrastructure for get_user_pages()-related unit tests"
 836        depends on DEBUG_FS
 837        help
 838          Provides /sys/kernel/debug/gup_test, which in turn provides a way
 839          to make ioctl calls that can launch kernel-based unit tests for
 840          the get_user_pages*() and pin_user_pages*() family of API calls.
 841
 842          These tests include benchmark testing of the _fast variants of
 843          get_user_pages*() and pin_user_pages*(), as well as smoke tests of
 844          the non-_fast variants.
 845
 846          There is also a sub-test that allows running dump_page() on any
 847          of up to eight pages (selected by command line args) within the
 848          range of user-space addresses. These pages are either pinned via
 849          pin_user_pages*(), or pinned via get_user_pages*(), as specified
 850          by other command line arguments.
 851
 852          See tools/testing/selftests/vm/gup_test.c
 853
 854comment "GUP_TEST needs to have DEBUG_FS enabled"
 855        depends on !GUP_TEST && !DEBUG_FS
 856
 857config GUP_GET_PTE_LOW_HIGH
 858        bool
 859
 860config READ_ONLY_THP_FOR_FS
 861        bool "Read-only THP for filesystems (EXPERIMENTAL)"
 862        depends on TRANSPARENT_HUGEPAGE && SHMEM
 863
 864        help
 865          Allow khugepaged to put read-only file-backed pages in THP.
 866
 867          This is marked experimental because it is a new feature. Write
 868          support of file THPs will be developed in the next few release
 869          cycles.
 870
 871config ARCH_HAS_PTE_SPECIAL
 872        bool
 873
 874#
 875# Some architectures require a special hugepage directory format that is
 876# required to support multiple hugepage sizes. For example a4fe3ce76
 877# "powerpc/mm: Allow more flexible layouts for hugepage pagetables"
 878# introduced it on powerpc.  This allows for a more flexible hugepage
 879# pagetable layouts.
 880#
 881config ARCH_HAS_HUGEPD
 882        bool
 883
 884config MAPPING_DIRTY_HELPERS
 885        bool
 886
 887config KMAP_LOCAL
 888        bool
 889
 890# struct io_mapping based helper.  Selected by drivers that need them
 891config IO_MAPPING
 892        bool
 893
 894config SECRETMEM
 895        def_bool ARCH_HAS_SET_DIRECT_MAP && !EMBEDDED
 896
 897source "mm/damon/Kconfig"
 898
 899endmenu
 900