tizen: packaging: Add baselibs.conf to provide 64-bit kernel & modules for 32-bit...
[platform/kernel/linux-rpi.git] / mm / Kconfig
1 # SPDX-License-Identifier: GPL-2.0-only
2
3 menu "Memory Management options"
4
5 #
6 # For some reason microblaze and nios2 hard code SWAP=n.  Hopefully we can
7 # add proper SWAP support to them, in which case this can be remove.
8 #
9 config ARCH_NO_SWAP
10         bool
11
12 config ZPOOL
13         bool
14
15 menuconfig SWAP
16         bool "Support for paging of anonymous memory (swap)"
17         depends on MMU && BLOCK && !ARCH_NO_SWAP
18         default y
19         help
20           This option allows you to choose whether you want to have support
21           for so called swap devices or swap files in your kernel that are
22           used to provide more virtual memory than the actual RAM present
23           in your computer.  If unsure say Y.
24
25 config ZSWAP
26         bool "Compressed cache for swap pages"
27         depends on SWAP
28         select CRYPTO
29         select ZPOOL
30         help
31           A lightweight compressed cache for swap pages.  It takes
32           pages that are in the process of being swapped out and attempts to
33           compress them into a dynamically allocated RAM-based memory pool.
34           This can result in a significant I/O reduction on swap device and,
35           in the case where decompressing from RAM is faster than swap device
36           reads, can also improve workload performance.
37
38 config ZSWAP_DEFAULT_ON
39         bool "Enable the compressed cache for swap pages by default"
40         depends on ZSWAP
41         help
42           If selected, the compressed cache for swap pages will be enabled
43           at boot, otherwise it will be disabled.
44
45           The selection made here can be overridden by using the kernel
46           command line 'zswap.enabled=' option.
47
48 config ZSWAP_EXCLUSIVE_LOADS_DEFAULT_ON
49         bool "Invalidate zswap entries when pages are loaded"
50         depends on ZSWAP
51         help
52           If selected, exclusive loads for zswap will be enabled at boot,
53           otherwise it will be disabled.
54
55           If exclusive loads are enabled, when a page is loaded from zswap,
56           the zswap entry is invalidated at once, as opposed to leaving it
57           in zswap until the swap entry is freed.
58
59           This avoids having two copies of the same page in memory
60           (compressed and uncompressed) after faulting in a page from zswap.
61           The cost is that if the page was never dirtied and needs to be
62           swapped out again, it will be re-compressed.
63
64 choice
65         prompt "Default compressor"
66         depends on ZSWAP
67         default ZSWAP_COMPRESSOR_DEFAULT_LZO
68         help
69           Selects the default compression algorithm for the compressed cache
70           for swap pages.
71
72           For an overview what kind of performance can be expected from
73           a particular compression algorithm please refer to the benchmarks
74           available at the following LWN page:
75           https://lwn.net/Articles/751795/
76
77           If in doubt, select 'LZO'.
78
79           The selection made here can be overridden by using the kernel
80           command line 'zswap.compressor=' option.
81
82 config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
83         bool "Deflate"
84         select CRYPTO_DEFLATE
85         help
86           Use the Deflate algorithm as the default compression algorithm.
87
88 config ZSWAP_COMPRESSOR_DEFAULT_LZO
89         bool "LZO"
90         select CRYPTO_LZO
91         help
92           Use the LZO algorithm as the default compression algorithm.
93
94 config ZSWAP_COMPRESSOR_DEFAULT_842
95         bool "842"
96         select CRYPTO_842
97         help
98           Use the 842 algorithm as the default compression algorithm.
99
100 config ZSWAP_COMPRESSOR_DEFAULT_LZ4
101         bool "LZ4"
102         select CRYPTO_LZ4
103         help
104           Use the LZ4 algorithm as the default compression algorithm.
105
106 config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
107         bool "LZ4HC"
108         select CRYPTO_LZ4HC
109         help
110           Use the LZ4HC algorithm as the default compression algorithm.
111
112 config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
113         bool "zstd"
114         select CRYPTO_ZSTD
115         help
116           Use the zstd algorithm as the default compression algorithm.
117 endchoice
118
119 config ZSWAP_COMPRESSOR_DEFAULT
120        string
121        depends on ZSWAP
122        default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
123        default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
124        default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
125        default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
126        default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
127        default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
128        default ""
129
130 choice
131         prompt "Default allocator"
132         depends on ZSWAP
133         default ZSWAP_ZPOOL_DEFAULT_ZBUD
134         help
135           Selects the default allocator for the compressed cache for
136           swap pages.
137           The default is 'zbud' for compatibility, however please do
138           read the description of each of the allocators below before
139           making a right choice.
140
141           The selection made here can be overridden by using the kernel
142           command line 'zswap.zpool=' option.
143
144 config ZSWAP_ZPOOL_DEFAULT_ZBUD
145         bool "zbud"
146         select ZBUD
147         help
148           Use the zbud allocator as the default allocator.
149
150 config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
151         bool "z3fold"
152         select Z3FOLD
153         help
154           Use the z3fold allocator as the default allocator.
155
156 config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
157         bool "zsmalloc"
158         select ZSMALLOC
159         help
160           Use the zsmalloc allocator as the default allocator.
161 endchoice
162
163 config ZSWAP_ZPOOL_DEFAULT
164        string
165        depends on ZSWAP
166        default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
167        default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
168        default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
169        default ""
170
171 config ZBUD
172         tristate "2:1 compression allocator (zbud)"
173         depends on ZSWAP
174         help
175           A special purpose allocator for storing compressed pages.
176           It is designed to store up to two compressed pages per physical
177           page.  While this design limits storage density, it has simple and
178           deterministic reclaim properties that make it preferable to a higher
179           density approach when reclaim will be used.
180
181 config Z3FOLD
182         tristate "3:1 compression allocator (z3fold)"
183         depends on ZSWAP
184         help
185           A special purpose allocator for storing compressed pages.
186           It is designed to store up to three compressed pages per physical
187           page. It is a ZBUD derivative so the simplicity and determinism are
188           still there.
189
190 config ZSMALLOC
191         tristate
192         prompt "N:1 compression allocator (zsmalloc)" if ZSWAP
193         depends on MMU
194         help
195           zsmalloc is a slab-based memory allocator designed to store
196           pages of various compression levels efficiently. It achieves
197           the highest storage density with the least amount of fragmentation.
198
199 config ZSMALLOC_STAT
200         bool "Export zsmalloc statistics"
201         depends on ZSMALLOC
202         select DEBUG_FS
203         help
204           This option enables code in the zsmalloc to collect various
205           statistics about what's happening in zsmalloc and exports that
206           information to userspace via debugfs.
207           If unsure, say N.
208
209 config ZSMALLOC_CHAIN_SIZE
210         int "Maximum number of physical pages per-zspage"
211         default 8
212         range 4 16
213         depends on ZSMALLOC
214         help
215           This option sets the upper limit on the number of physical pages
216           that a zmalloc page (zspage) can consist of. The optimal zspage
217           chain size is calculated for each size class during the
218           initialization of the pool.
219
220           Changing this option can alter the characteristics of size classes,
221           such as the number of pages per zspage and the number of objects
222           per zspage. This can also result in different configurations of
223           the pool, as zsmalloc merges size classes with similar
224           characteristics.
225
226           For more information, see zsmalloc documentation.
227
228 menu "SLAB allocator options"
229
230 choice
231         prompt "Choose SLAB allocator"
232         default SLUB
233         help
234            This option allows to select a slab allocator.
235
236 config SLAB_DEPRECATED
237         bool "SLAB (DEPRECATED)"
238         depends on !PREEMPT_RT
239         help
240           Deprecated and scheduled for removal in a few cycles. Replaced by
241           SLUB.
242
243           If you cannot migrate to SLUB, please contact linux-mm@kvack.org
244           and the people listed in the SLAB ALLOCATOR section of MAINTAINERS
245           file, explaining why.
246
247           The regular slab allocator that is established and known to work
248           well in all environments. It organizes cache hot objects in
249           per cpu and per node queues.
250
251 config SLUB
252         bool "SLUB (Unqueued Allocator)"
253         help
254            SLUB is a slab allocator that minimizes cache line usage
255            instead of managing queues of cached objects (SLAB approach).
256            Per cpu caching is realized using slabs of objects instead
257            of queues of objects. SLUB can use memory efficiently
258            and has enhanced diagnostics. SLUB is the default choice for
259            a slab allocator.
260
261 endchoice
262
263 config SLAB
264         bool
265         default y
266         depends on SLAB_DEPRECATED
267
268 config SLUB_TINY
269         bool "Configure SLUB for minimal memory footprint"
270         depends on SLUB && EXPERT
271         select SLAB_MERGE_DEFAULT
272         help
273            Configures the SLUB allocator in a way to achieve minimal memory
274            footprint, sacrificing scalability, debugging and other features.
275            This is intended only for the smallest system that had used the
276            SLOB allocator and is not recommended for systems with more than
277            16MB RAM.
278
279            If unsure, say N.
280
281 config SLAB_MERGE_DEFAULT
282         bool "Allow slab caches to be merged"
283         default y
284         depends on SLAB || SLUB
285         help
286           For reduced kernel memory fragmentation, slab caches can be
287           merged when they share the same size and other characteristics.
288           This carries a risk of kernel heap overflows being able to
289           overwrite objects from merged caches (and more easily control
290           cache layout), which makes such heap attacks easier to exploit
291           by attackers. By keeping caches unmerged, these kinds of exploits
292           can usually only damage objects in the same cache. To disable
293           merging at runtime, "slab_nomerge" can be passed on the kernel
294           command line.
295
296 config SLAB_FREELIST_RANDOM
297         bool "Randomize slab freelist"
298         depends on SLAB || (SLUB && !SLUB_TINY)
299         help
300           Randomizes the freelist order used on creating new pages. This
301           security feature reduces the predictability of the kernel slab
302           allocator against heap overflows.
303
304 config SLAB_FREELIST_HARDENED
305         bool "Harden slab freelist metadata"
306         depends on SLAB || (SLUB && !SLUB_TINY)
307         help
308           Many kernel heap attacks try to target slab cache metadata and
309           other infrastructure. This options makes minor performance
310           sacrifices to harden the kernel slab allocator against common
311           freelist exploit methods. Some slab implementations have more
312           sanity-checking than others. This option is most effective with
313           CONFIG_SLUB.
314
315 config SLUB_STATS
316         default n
317         bool "Enable SLUB performance statistics"
318         depends on SLUB && SYSFS && !SLUB_TINY
319         help
320           SLUB statistics are useful to debug SLUBs allocation behavior in
321           order find ways to optimize the allocator. This should never be
322           enabled for production use since keeping statistics slows down
323           the allocator by a few percentage points. The slabinfo command
324           supports the determination of the most active slabs to figure
325           out which slabs are relevant to a particular load.
326           Try running: slabinfo -DA
327
328 config SLUB_CPU_PARTIAL
329         default y
330         depends on SLUB && SMP && !SLUB_TINY
331         bool "SLUB per cpu partial cache"
332         help
333           Per cpu partial caches accelerate objects allocation and freeing
334           that is local to a processor at the price of more indeterminism
335           in the latency of the free. On overflow these caches will be cleared
336           which requires the taking of locks that may cause latency spikes.
337           Typically one would choose no for a realtime system.
338
339 config RANDOM_KMALLOC_CACHES
340         default n
341         depends on SLUB && !SLUB_TINY
342         bool "Randomize slab caches for normal kmalloc"
343         help
344           A hardening feature that creates multiple copies of slab caches for
345           normal kmalloc allocation and makes kmalloc randomly pick one based
346           on code address, which makes the attackers more difficult to spray
347           vulnerable memory objects on the heap for the purpose of exploiting
348           memory vulnerabilities.
349
350           Currently the number of copies is set to 16, a reasonably large value
351           that effectively diverges the memory objects allocated for different
352           subsystems or modules into different caches, at the expense of a
353           limited degree of memory and CPU overhead that relates to hardware and
354           system workload.
355
356 endmenu # SLAB allocator options
357
358 config SHUFFLE_PAGE_ALLOCATOR
359         bool "Page allocator randomization"
360         default SLAB_FREELIST_RANDOM && ACPI_NUMA
361         help
362           Randomization of the page allocator improves the average
363           utilization of a direct-mapped memory-side-cache. See section
364           5.2.27 Heterogeneous Memory Attribute Table (HMAT) in the ACPI
365           6.2a specification for an example of how a platform advertises
366           the presence of a memory-side-cache. There are also incidental
367           security benefits as it reduces the predictability of page
368           allocations to compliment SLAB_FREELIST_RANDOM, but the
369           default granularity of shuffling on the MAX_ORDER i.e, 10th
370           order of pages is selected based on cache utilization benefits
371           on x86.
372
373           While the randomization improves cache utilization it may
374           negatively impact workloads on platforms without a cache. For
375           this reason, by default, the randomization is enabled only
376           after runtime detection of a direct-mapped memory-side-cache.
377           Otherwise, the randomization may be force enabled with the
378           'page_alloc.shuffle' kernel command line parameter.
379
380           Say Y if unsure.
381
382 config COMPAT_BRK
383         bool "Disable heap randomization"
384         default y
385         help
386           Randomizing heap placement makes heap exploits harder, but it
387           also breaks ancient binaries (including anything libc5 based).
388           This option changes the bootup default to heap randomization
389           disabled, and can be overridden at runtime by setting
390           /proc/sys/kernel/randomize_va_space to 2.
391
392           On non-ancient distros (post-2000 ones) N is usually a safe choice.
393
394 config MMAP_ALLOW_UNINITIALIZED
395         bool "Allow mmapped anonymous memory to be uninitialized"
396         depends on EXPERT && !MMU
397         default n
398         help
399           Normally, and according to the Linux spec, anonymous memory obtained
400           from mmap() has its contents cleared before it is passed to
401           userspace.  Enabling this config option allows you to request that
402           mmap() skip that if it is given an MAP_UNINITIALIZED flag, thus
403           providing a huge performance boost.  If this option is not enabled,
404           then the flag will be ignored.
405
406           This is taken advantage of by uClibc's malloc(), and also by
407           ELF-FDPIC binfmt's brk and stack allocator.
408
409           Because of the obvious security issues, this option should only be
410           enabled on embedded devices where you control what is run in
411           userspace.  Since that isn't generally a problem on no-MMU systems,
412           it is normally safe to say Y here.
413
414           See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
415
416 config SELECT_MEMORY_MODEL
417         def_bool y
418         depends on ARCH_SELECT_MEMORY_MODEL
419
420 choice
421         prompt "Memory model"
422         depends on SELECT_MEMORY_MODEL
423         default SPARSEMEM_MANUAL if ARCH_SPARSEMEM_DEFAULT
424         default FLATMEM_MANUAL
425         help
426           This option allows you to change some of the ways that
427           Linux manages its memory internally. Most users will
428           only have one option here selected by the architecture
429           configuration. This is normal.
430
431 config FLATMEM_MANUAL
432         bool "Flat Memory"
433         depends on !ARCH_SPARSEMEM_ENABLE || ARCH_FLATMEM_ENABLE
434         help
435           This option is best suited for non-NUMA systems with
436           flat address space. The FLATMEM is the most efficient
437           system in terms of performance and resource consumption
438           and it is the best option for smaller systems.
439
440           For systems that have holes in their physical address
441           spaces and for features like NUMA and memory hotplug,
442           choose "Sparse Memory".
443
444           If unsure, choose this option (Flat Memory) over any other.
445
446 config SPARSEMEM_MANUAL
447         bool "Sparse Memory"
448         depends on ARCH_SPARSEMEM_ENABLE
449         help
450           This will be the only option for some systems, including
451           memory hot-plug systems.  This is normal.
452
453           This option provides efficient support for systems with
454           holes is their physical address space and allows memory
455           hot-plug and hot-remove.
456
457           If unsure, choose "Flat Memory" over this option.
458
459 endchoice
460
461 config SPARSEMEM
462         def_bool y
463         depends on (!SELECT_MEMORY_MODEL && ARCH_SPARSEMEM_ENABLE) || SPARSEMEM_MANUAL
464
465 config FLATMEM
466         def_bool y
467         depends on !SPARSEMEM || FLATMEM_MANUAL
468
469 #
470 # SPARSEMEM_EXTREME (which is the default) does some bootmem
471 # allocations when sparse_init() is called.  If this cannot
472 # be done on your architecture, select this option.  However,
473 # statically allocating the mem_section[] array can potentially
474 # consume vast quantities of .bss, so be careful.
475 #
476 # This option will also potentially produce smaller runtime code
477 # with gcc 3.4 and later.
478 #
479 config SPARSEMEM_STATIC
480         bool
481
482 #
483 # Architecture platforms which require a two level mem_section in SPARSEMEM
484 # must select this option. This is usually for architecture platforms with
485 # an extremely sparse physical address space.
486 #
487 config SPARSEMEM_EXTREME
488         def_bool y
489         depends on SPARSEMEM && !SPARSEMEM_STATIC
490
491 config SPARSEMEM_VMEMMAP_ENABLE
492         bool
493
494 config SPARSEMEM_VMEMMAP
495         bool "Sparse Memory virtual memmap"
496         depends on SPARSEMEM && SPARSEMEM_VMEMMAP_ENABLE
497         default y
498         help
499           SPARSEMEM_VMEMMAP uses a virtually mapped memmap to optimise
500           pfn_to_page and page_to_pfn operations.  This is the most
501           efficient option when sufficient kernel resources are available.
502 #
503 # Select this config option from the architecture Kconfig, if it is preferred
504 # to enable the feature of HugeTLB/dev_dax vmemmap optimization.
505 #
506 config ARCH_WANT_OPTIMIZE_DAX_VMEMMAP
507         bool
508
509 config ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP
510         bool
511
512 config HAVE_MEMBLOCK_PHYS_MAP
513         bool
514
515 config HAVE_FAST_GUP
516         depends on MMU
517         bool
518
519 # Don't discard allocated memory used to track "memory" and "reserved" memblocks
520 # after early boot, so it can still be used to test for validity of memory.
521 # Also, memblocks are updated with memory hot(un)plug.
522 config ARCH_KEEP_MEMBLOCK
523         bool
524
525 # Keep arch NUMA mapping infrastructure post-init.
526 config NUMA_KEEP_MEMINFO
527         bool
528
529 config MEMORY_ISOLATION
530         bool
531
532 # IORESOURCE_SYSTEM_RAM regions in the kernel resource tree that are marked
533 # IORESOURCE_EXCLUSIVE cannot be mapped to user space, for example, via
534 # /dev/mem.
535 config EXCLUSIVE_SYSTEM_RAM
536         def_bool y
537         depends on !DEVMEM || STRICT_DEVMEM
538
539 #
540 # Only be set on architectures that have completely implemented memory hotplug
541 # feature. If you are not sure, don't touch it.
542 #
543 config HAVE_BOOTMEM_INFO_NODE
544         def_bool n
545
546 config ARCH_ENABLE_MEMORY_HOTPLUG
547         bool
548
549 config ARCH_ENABLE_MEMORY_HOTREMOVE
550         bool
551
552 # eventually, we can have this option just 'select SPARSEMEM'
553 menuconfig MEMORY_HOTPLUG
554         bool "Memory hotplug"
555         select MEMORY_ISOLATION
556         depends on SPARSEMEM
557         depends on ARCH_ENABLE_MEMORY_HOTPLUG
558         depends on 64BIT
559         select NUMA_KEEP_MEMINFO if NUMA
560
561 if MEMORY_HOTPLUG
562
563 config MEMORY_HOTPLUG_DEFAULT_ONLINE
564         bool "Online the newly added memory blocks by default"
565         depends on MEMORY_HOTPLUG
566         help
567           This option sets the default policy setting for memory hotplug
568           onlining policy (/sys/devices/system/memory/auto_online_blocks) which
569           determines what happens to newly added memory regions. Policy setting
570           can always be changed at runtime.
571           See Documentation/admin-guide/mm/memory-hotplug.rst for more information.
572
573           Say Y here if you want all hot-plugged memory blocks to appear in
574           'online' state by default.
575           Say N here if you want the default policy to keep all hot-plugged
576           memory blocks in 'offline' state.
577
578 config MEMORY_HOTREMOVE
579         bool "Allow for memory hot remove"
580         select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
581         depends on MEMORY_HOTPLUG && ARCH_ENABLE_MEMORY_HOTREMOVE
582         depends on MIGRATION
583
584 config MHP_MEMMAP_ON_MEMORY
585         def_bool y
586         depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
587         depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
588
589 endif # MEMORY_HOTPLUG
590
591 config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
592        bool
593
594 # Heavily threaded applications may benefit from splitting the mm-wide
595 # page_table_lock, so that faults on different parts of the user address
596 # space can be handled with less contention: split it at this NR_CPUS.
597 # Default to 4 for wider testing, though 8 might be more appropriate.
598 # ARM's adjust_pte (unused if VIPT) depends on mm-wide page_table_lock.
599 # PA-RISC 7xxx's spinlock_t would enlarge struct page from 32 to 44 bytes.
600 # SPARC32 allocates multiple pte tables within a single page, and therefore
601 # a per-page lock leads to problems when multiple tables need to be locked
602 # at the same time (e.g. copy_page_range()).
603 # DEBUG_SPINLOCK and DEBUG_LOCK_ALLOC spinlock_t also enlarge struct page.
604 #
605 config SPLIT_PTLOCK_CPUS
606         int
607         default "999999" if !MMU
608         default "999999" if ARM && !CPU_CACHE_VIPT
609         default "999999" if PARISC && !PA20
610         default "999999" if SPARC32
611         default "4"
612
613 config ARCH_ENABLE_SPLIT_PMD_PTLOCK
614         bool
615
616 #
617 # support for memory balloon
618 config MEMORY_BALLOON
619         bool
620
621 #
622 # support for memory balloon compaction
623 config BALLOON_COMPACTION
624         bool "Allow for balloon memory compaction/migration"
625         def_bool y
626         depends on COMPACTION && MEMORY_BALLOON
627         help
628           Memory fragmentation introduced by ballooning might reduce
629           significantly the number of 2MB contiguous memory blocks that can be
630           used within a guest, thus imposing performance penalties associated
631           with the reduced number of transparent huge pages that could be used
632           by the guest workload. Allowing the compaction & migration for memory
633           pages enlisted as being part of memory balloon devices avoids the
634           scenario aforementioned and helps improving memory defragmentation.
635
636 #
637 # support for memory compaction
638 config COMPACTION
639         bool "Allow for memory compaction"
640         def_bool y
641         select MIGRATION
642         depends on MMU
643         help
644           Compaction is the only memory management component to form
645           high order (larger physically contiguous) memory blocks
646           reliably. The page allocator relies on compaction heavily and
647           the lack of the feature can lead to unexpected OOM killer
648           invocations for high order memory requests. You shouldn't
649           disable this option unless there really is a strong reason for
650           it and then we would be really interested to hear about that at
651           linux-mm@kvack.org.
652
653 config COMPACT_UNEVICTABLE_DEFAULT
654         int
655         depends on COMPACTION
656         default 0 if PREEMPT_RT
657         default 1
658
659 #
660 # support for free page reporting
661 config PAGE_REPORTING
662         bool "Free page reporting"
663         def_bool n
664         help
665           Free page reporting allows for the incremental acquisition of
666           free pages from the buddy allocator for the purpose of reporting
667           those pages to another entity, such as a hypervisor, so that the
668           memory can be freed within the host for other uses.
669
670 #
671 # support for page migration
672 #
673 config MIGRATION
674         bool "Page migration"
675         def_bool y
676         depends on (NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION || CMA) && MMU
677         help
678           Allows the migration of the physical location of pages of processes
679           while the virtual addresses are not changed. This is useful in
680           two situations. The first is on NUMA systems to put pages nearer
681           to the processors accessing. The second is when allocating huge
682           pages as migration can relocate pages to satisfy a huge page
683           allocation instead of reclaiming.
684
685 config DEVICE_MIGRATION
686         def_bool MIGRATION && ZONE_DEVICE
687
688 config ARCH_ENABLE_HUGEPAGE_MIGRATION
689         bool
690
691 config ARCH_ENABLE_THP_MIGRATION
692         bool
693
694 config HUGETLB_PAGE_SIZE_VARIABLE
695         def_bool n
696         help
697           Allows the pageblock_order value to be dynamic instead of just standard
698           HUGETLB_PAGE_ORDER when there are multiple HugeTLB page sizes available
699           on a platform.
700
701           Note that the pageblock_order cannot exceed MAX_ORDER and will be
702           clamped down to MAX_ORDER.
703
704 config CONTIG_ALLOC
705         def_bool (MEMORY_ISOLATION && COMPACTION) || CMA
706
707 config PHYS_ADDR_T_64BIT
708         def_bool 64BIT
709
710 config BOUNCE
711         bool "Enable bounce buffers"
712         default y
713         depends on BLOCK && MMU && HIGHMEM
714         help
715           Enable bounce buffers for devices that cannot access the full range of
716           memory available to the CPU. Enabled by default when HIGHMEM is
717           selected, but you may say n to override this.
718
719 config MMU_NOTIFIER
720         bool
721         select INTERVAL_TREE
722
723 config KSM
724         bool "Enable KSM for page merging"
725         depends on MMU
726         select XXHASH
727         help
728           Enable Kernel Samepage Merging: KSM periodically scans those areas
729           of an application's address space that an app has advised may be
730           mergeable.  When it finds pages of identical content, it replaces
731           the many instances by a single page with that content, so
732           saving memory until one or another app needs to modify the content.
733           Recommended for use with KVM, or with other duplicative applications.
734           See Documentation/mm/ksm.rst for more information: KSM is inactive
735           until a program has madvised that an area is MADV_MERGEABLE, and
736           root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
737
738 config DEFAULT_MMAP_MIN_ADDR
739         int "Low address space to protect from user allocation"
740         depends on MMU
741         default 4096
742         help
743           This is the portion of low virtual memory which should be protected
744           from userspace allocation.  Keeping a user from writing to low pages
745           can help reduce the impact of kernel NULL pointer bugs.
746
747           For most ia64, ppc64 and x86 users with lots of address space
748           a value of 65536 is reasonable and should cause no problems.
749           On arm and other archs it should not be higher than 32768.
750           Programs which use vm86 functionality or have some need to map
751           this low address space will need CAP_SYS_RAWIO or disable this
752           protection by setting the value to 0.
753
754           This value can be changed after boot using the
755           /proc/sys/vm/mmap_min_addr tunable.
756
757 config ARCH_SUPPORTS_MEMORY_FAILURE
758         bool
759
760 config MEMORY_FAILURE
761         depends on MMU
762         depends on ARCH_SUPPORTS_MEMORY_FAILURE
763         bool "Enable recovery from hardware memory errors"
764         select MEMORY_ISOLATION
765         select RAS
766         help
767           Enables code to recover from some memory failures on systems
768           with MCA recovery. This allows a system to continue running
769           even when some of its memory has uncorrected errors. This requires
770           special hardware support and typically ECC memory.
771
772 config HWPOISON_INJECT
773         tristate "HWPoison pages injector"
774         depends on MEMORY_FAILURE && DEBUG_KERNEL && PROC_FS
775         select PROC_PAGE_MONITOR
776
777 config NOMMU_INITIAL_TRIM_EXCESS
778         int "Turn on mmap() excess space trimming before booting"
779         depends on !MMU
780         default 1
781         help
782           The NOMMU mmap() frequently needs to allocate large contiguous chunks
783           of memory on which to store mappings, but it can only ask the system
784           allocator for chunks in 2^N*PAGE_SIZE amounts - which is frequently
785           more than it requires.  To deal with this, mmap() is able to trim off
786           the excess and return it to the allocator.
787
788           If trimming is enabled, the excess is trimmed off and returned to the
789           system allocator, which can cause extra fragmentation, particularly
790           if there are a lot of transient processes.
791
792           If trimming is disabled, the excess is kept, but not used, which for
793           long-term mappings means that the space is wasted.
794
795           Trimming can be dynamically controlled through a sysctl option
796           (/proc/sys/vm/nr_trim_pages) which specifies the minimum number of
797           excess pages there must be before trimming should occur, or zero if
798           no trimming is to occur.
799
800           This option specifies the initial value of this option.  The default
801           of 1 says that all excess pages should be trimmed.
802
803           See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
804
805 config ARCH_WANT_GENERAL_HUGETLB
806         bool
807
808 config ARCH_WANTS_THP_SWAP
809         def_bool n
810
811 menuconfig TRANSPARENT_HUGEPAGE
812         bool "Transparent Hugepage Support"
813         depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT
814         select COMPACTION
815         select XARRAY_MULTI
816         help
817           Transparent Hugepages allows the kernel to use huge pages and
818           huge tlb transparently to the applications whenever possible.
819           This feature can improve computing performance to certain
820           applications by speeding up page faults during memory
821           allocation, by reducing the number of tlb misses and by speeding
822           up the pagetable walking.
823
824           If memory constrained on embedded, you may want to say N.
825
826 if TRANSPARENT_HUGEPAGE
827
828 choice
829         prompt "Transparent Hugepage Support sysfs defaults"
830         depends on TRANSPARENT_HUGEPAGE
831         default TRANSPARENT_HUGEPAGE_ALWAYS
832         help
833           Selects the sysfs defaults for Transparent Hugepage Support.
834
835         config TRANSPARENT_HUGEPAGE_ALWAYS
836                 bool "always"
837         help
838           Enabling Transparent Hugepage always, can increase the
839           memory footprint of applications without a guaranteed
840           benefit but it will work automatically for all applications.
841
842         config TRANSPARENT_HUGEPAGE_MADVISE
843                 bool "madvise"
844         help
845           Enabling Transparent Hugepage madvise, will only provide a
846           performance improvement benefit to the applications using
847           madvise(MADV_HUGEPAGE) but it won't risk to increase the
848           memory footprint of applications without a guaranteed
849           benefit.
850 endchoice
851
852 config THP_SWAP
853         def_bool y
854         depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP && 64BIT
855         help
856           Swap transparent huge pages in one piece, without splitting.
857           XXX: For now, swap cluster backing transparent huge page
858           will be split after swapout.
859
860           For selection by architectures with reasonable THP sizes.
861
862 config READ_ONLY_THP_FOR_FS
863         bool "Read-only THP for filesystems (EXPERIMENTAL)"
864         depends on TRANSPARENT_HUGEPAGE && SHMEM
865
866         help
867           Allow khugepaged to put read-only file-backed pages in THP.
868
869           This is marked experimental because it is a new feature. Write
870           support of file THPs will be developed in the next few release
871           cycles.
872
873 endif # TRANSPARENT_HUGEPAGE
874
875 #
876 # UP and nommu archs use km based percpu allocator
877 #
878 config NEED_PER_CPU_KM
879         depends on !SMP || !MMU
880         bool
881         default y
882
883 config NEED_PER_CPU_EMBED_FIRST_CHUNK
884         bool
885
886 config NEED_PER_CPU_PAGE_FIRST_CHUNK
887         bool
888
889 config USE_PERCPU_NUMA_NODE_ID
890         bool
891
892 config HAVE_SETUP_PER_CPU_AREA
893         bool
894
895 config CMA
896         bool "Contiguous Memory Allocator"
897         depends on MMU
898         select MIGRATION
899         select MEMORY_ISOLATION
900         help
901           This enables the Contiguous Memory Allocator which allows other
902           subsystems to allocate big physically-contiguous blocks of memory.
903           CMA reserves a region of memory and allows only movable pages to
904           be allocated from it. This way, the kernel can use the memory for
905           pagecache and when a subsystem requests for contiguous area, the
906           allocated pages are migrated away to serve the contiguous request.
907
908           If unsure, say "n".
909
910 config CMA_DEBUG
911         bool "CMA debug messages (DEVELOPMENT)"
912         depends on DEBUG_KERNEL && CMA
913         help
914           Turns on debug messages in CMA.  This produces KERN_DEBUG
915           messages for every CMA call as well as various messages while
916           processing calls such as dma_alloc_from_contiguous().
917           This option does not affect warning and error messages.
918
919 config CMA_DEBUGFS
920         bool "CMA debugfs interface"
921         depends on CMA && DEBUG_FS
922         help
923           Turns on the DebugFS interface for CMA.
924
925 config CMA_SYSFS
926         bool "CMA information through sysfs interface"
927         depends on CMA && SYSFS
928         help
929           This option exposes some sysfs attributes to get information
930           from CMA.
931
932 config CMA_AREAS
933         int "Maximum count of the CMA areas"
934         depends on CMA
935         default 19 if NUMA
936         default 7
937         help
938           CMA allows to create CMA areas for particular purpose, mainly,
939           used as device private area. This parameter sets the maximum
940           number of CMA area in the system.
941
942           If unsure, leave the default value "7" in UMA and "19" in NUMA.
943
944 config MEM_SOFT_DIRTY
945         bool "Track memory changes"
946         depends on CHECKPOINT_RESTORE && HAVE_ARCH_SOFT_DIRTY && PROC_FS
947         select PROC_PAGE_MONITOR
948         help
949           This option enables memory changes tracking by introducing a
950           soft-dirty bit on pte-s. This bit it set when someone writes
951           into a page just as regular dirty bit, but unlike the latter
952           it can be cleared by hands.
953
954           See Documentation/admin-guide/mm/soft-dirty.rst for more details.
955
956 config GENERIC_EARLY_IOREMAP
957         bool
958
959 config STACK_MAX_DEFAULT_SIZE_MB
960         int "Default maximum user stack size for 32-bit processes (MB)"
961         default 100
962         range 8 2048
963         depends on STACK_GROWSUP && (!64BIT || COMPAT)
964         help
965           This is the maximum stack size in Megabytes in the VM layout of 32-bit
966           user processes when the stack grows upwards (currently only on parisc
967           arch) when the RLIMIT_STACK hard limit is unlimited.
968
969           A sane initial value is 100 MB.
970
971 config DEFERRED_STRUCT_PAGE_INIT
972         bool "Defer initialisation of struct pages to kthreads"
973         depends on SPARSEMEM
974         depends on !NEED_PER_CPU_KM
975         depends on 64BIT
976         select PADATA
977         help
978           Ordinarily all struct pages are initialised during early boot in a
979           single thread. On very large machines this can take a considerable
980           amount of time. If this option is set, large machines will bring up
981           a subset of memmap at boot and then initialise the rest in parallel.
982           This has a potential performance impact on tasks running early in the
983           lifetime of the system until these kthreads finish the
984           initialisation.
985
986 config PAGE_IDLE_FLAG
987         bool
988         select PAGE_EXTENSION if !64BIT
989         help
990           This adds PG_idle and PG_young flags to 'struct page'.  PTE Accessed
991           bit writers can set the state of the bit in the flags so that PTE
992           Accessed bit readers may avoid disturbance.
993
994 config IDLE_PAGE_TRACKING
995         bool "Enable idle page tracking"
996         depends on SYSFS && MMU
997         select PAGE_IDLE_FLAG
998         help
999           This feature allows to estimate the amount of user pages that have
1000           not been touched during a given period of time. This information can
1001           be useful to tune memory cgroup limits and/or for job placement
1002           within a compute cluster.
1003
1004           See Documentation/admin-guide/mm/idle_page_tracking.rst for
1005           more details.
1006
1007 config ARCH_HAS_CACHE_LINE_SIZE
1008         bool
1009
1010 config ARCH_HAS_CURRENT_STACK_POINTER
1011         bool
1012         help
1013           In support of HARDENED_USERCOPY performing stack variable lifetime
1014           checking, an architecture-agnostic way to find the stack pointer
1015           is needed. Once an architecture defines an unsigned long global
1016           register alias named "current_stack_pointer", this config can be
1017           selected.
1018
1019 config ARCH_HAS_PTE_DEVMAP
1020         bool
1021
1022 config ARCH_HAS_ZONE_DMA_SET
1023         bool
1024
1025 config ZONE_DMA
1026         bool "Support DMA zone" if ARCH_HAS_ZONE_DMA_SET
1027         default y if ARM64 || X86
1028
1029 config ZONE_DMA32
1030         bool "Support DMA32 zone" if ARCH_HAS_ZONE_DMA_SET
1031         depends on !X86_32
1032         default y if ARM64
1033
1034 config ZONE_DEVICE
1035         bool "Device memory (pmem, HMM, etc...) hotplug support"
1036         depends on MEMORY_HOTPLUG
1037         depends on MEMORY_HOTREMOVE
1038         depends on SPARSEMEM_VMEMMAP
1039         depends on ARCH_HAS_PTE_DEVMAP
1040         select XARRAY_MULTI
1041
1042         help
1043           Device memory hotplug support allows for establishing pmem,
1044           or other device driver discovered memory regions, in the
1045           memmap. This allows pfn_to_page() lookups of otherwise
1046           "device-physical" addresses which is needed for using a DAX
1047           mapping in an O_DIRECT operation, among other things.
1048
1049           If FS_DAX is enabled, then say Y.
1050
1051 #
1052 # Helpers to mirror range of the CPU page tables of a process into device page
1053 # tables.
1054 #
1055 config HMM_MIRROR
1056         bool
1057         depends on MMU
1058
1059 config GET_FREE_REGION
1060         depends on SPARSEMEM
1061         bool
1062
1063 config DEVICE_PRIVATE
1064         bool "Unaddressable device memory (GPU memory, ...)"
1065         depends on ZONE_DEVICE
1066         select GET_FREE_REGION
1067
1068         help
1069           Allows creation of struct pages to represent unaddressable device
1070           memory; i.e., memory that is only accessible from the device (or
1071           group of devices). You likely also want to select HMM_MIRROR.
1072
1073 config VMAP_PFN
1074         bool
1075
1076 config ARCH_USES_HIGH_VMA_FLAGS
1077         bool
1078 config ARCH_HAS_PKEYS
1079         bool
1080
1081 config ARCH_USES_PG_ARCH_X
1082         bool
1083         help
1084           Enable the definition of PG_arch_x page flags with x > 1. Only
1085           suitable for 64-bit architectures with CONFIG_FLATMEM or
1086           CONFIG_SPARSEMEM_VMEMMAP enabled, otherwise there may not be
1087           enough room for additional bits in page->flags.
1088
1089 config VM_EVENT_COUNTERS
1090         default y
1091         bool "Enable VM event counters for /proc/vmstat" if EXPERT
1092         help
1093           VM event counters are needed for event counts to be shown.
1094           This option allows the disabling of the VM event counters
1095           on EXPERT systems.  /proc/vmstat will only show page counts
1096           if VM event counters are disabled.
1097
1098 config PERCPU_STATS
1099         bool "Collect percpu memory statistics"
1100         help
1101           This feature collects and exposes statistics via debugfs. The
1102           information includes global and per chunk statistics, which can
1103           be used to help understand percpu memory usage.
1104
1105 config GUP_TEST
1106         bool "Enable infrastructure for get_user_pages()-related unit tests"
1107         depends on DEBUG_FS
1108         help
1109           Provides /sys/kernel/debug/gup_test, which in turn provides a way
1110           to make ioctl calls that can launch kernel-based unit tests for
1111           the get_user_pages*() and pin_user_pages*() family of API calls.
1112
1113           These tests include benchmark testing of the _fast variants of
1114           get_user_pages*() and pin_user_pages*(), as well as smoke tests of
1115           the non-_fast variants.
1116
1117           There is also a sub-test that allows running dump_page() on any
1118           of up to eight pages (selected by command line args) within the
1119           range of user-space addresses. These pages are either pinned via
1120           pin_user_pages*(), or pinned via get_user_pages*(), as specified
1121           by other command line arguments.
1122
1123           See tools/testing/selftests/mm/gup_test.c
1124
1125 comment "GUP_TEST needs to have DEBUG_FS enabled"
1126         depends on !GUP_TEST && !DEBUG_FS
1127
1128 config GUP_GET_PXX_LOW_HIGH
1129         bool
1130
1131 config DMAPOOL_TEST
1132         tristate "Enable a module to run time tests on dma_pool"
1133         depends on HAS_DMA
1134         help
1135           Provides a test module that will allocate and free many blocks of
1136           various sizes and report how long it takes. This is intended to
1137           provide a consistent way to measure how changes to the
1138           dma_pool_alloc/free routines affect performance.
1139
1140 config ARCH_HAS_PTE_SPECIAL
1141         bool
1142
1143 #
1144 # Some architectures require a special hugepage directory format that is
1145 # required to support multiple hugepage sizes. For example a4fe3ce76
1146 # "powerpc/mm: Allow more flexible layouts for hugepage pagetables"
1147 # introduced it on powerpc.  This allows for a more flexible hugepage
1148 # pagetable layouts.
1149 #
1150 config ARCH_HAS_HUGEPD
1151         bool
1152
1153 config MAPPING_DIRTY_HELPERS
1154         bool
1155
1156 config KMAP_LOCAL
1157         bool
1158
1159 config KMAP_LOCAL_NON_LINEAR_PTE_ARRAY
1160         bool
1161
1162 # struct io_mapping based helper.  Selected by drivers that need them
1163 config IO_MAPPING
1164         bool
1165
1166 config MEMFD_CREATE
1167         bool "Enable memfd_create() system call" if EXPERT
1168
1169 config SECRETMEM
1170         default y
1171         bool "Enable memfd_secret() system call" if EXPERT
1172         depends on ARCH_HAS_SET_DIRECT_MAP
1173         help
1174           Enable the memfd_secret() system call with the ability to create
1175           memory areas visible only in the context of the owning process and
1176           not mapped to other processes and other kernel page tables.
1177
1178 config ANON_VMA_NAME
1179         bool "Anonymous VMA name support"
1180         depends on PROC_FS && ADVISE_SYSCALLS && MMU
1181
1182         help
1183           Allow naming anonymous virtual memory areas.
1184
1185           This feature allows assigning names to virtual memory areas. Assigned
1186           names can be later retrieved from /proc/pid/maps and /proc/pid/smaps
1187           and help identifying individual anonymous memory areas.
1188           Assigning a name to anonymous virtual memory area might prevent that
1189           area from being merged with adjacent virtual memory areas due to the
1190           difference in their name.
1191
1192 config USERFAULTFD
1193         bool "Enable userfaultfd() system call"
1194         depends on MMU
1195         help
1196           Enable the userfaultfd() system call that allows to intercept and
1197           handle page faults in userland.
1198
1199 config HAVE_ARCH_USERFAULTFD_WP
1200         bool
1201         help
1202           Arch has userfaultfd write protection support
1203
1204 config HAVE_ARCH_USERFAULTFD_MINOR
1205         bool
1206         help
1207           Arch has userfaultfd minor fault support
1208
1209 config PTE_MARKER_UFFD_WP
1210         bool "Userfaultfd write protection support for shmem/hugetlbfs"
1211         default y
1212         depends on HAVE_ARCH_USERFAULTFD_WP
1213
1214         help
1215           Allows to create marker PTEs for userfaultfd write protection
1216           purposes.  It is required to enable userfaultfd write protection on
1217           file-backed memory types like shmem and hugetlbfs.
1218
1219 # multi-gen LRU {
1220 config LRU_GEN
1221         bool "Multi-Gen LRU"
1222         depends on MMU
1223         # make sure folio->flags has enough spare bits
1224         depends on 64BIT || !SPARSEMEM || SPARSEMEM_VMEMMAP
1225         help
1226           A high performance LRU implementation to overcommit memory. See
1227           Documentation/admin-guide/mm/multigen_lru.rst for details.
1228
1229 config LRU_GEN_ENABLED
1230         bool "Enable by default"
1231         depends on LRU_GEN
1232         help
1233           This option enables the multi-gen LRU by default.
1234
1235 config LRU_GEN_STATS
1236         bool "Full stats for debugging"
1237         depends on LRU_GEN
1238         help
1239           Do not enable this option unless you plan to look at historical stats
1240           from evicted generations for debugging purpose.
1241
1242           This option has a per-memcg and per-node memory overhead.
1243 # }
1244
1245 config ARCH_SUPPORTS_PER_VMA_LOCK
1246        def_bool n
1247
1248 config PER_VMA_LOCK
1249         def_bool y
1250         depends on ARCH_SUPPORTS_PER_VMA_LOCK && MMU && SMP
1251         help
1252           Allow per-vma locking during page fault handling.
1253
1254           This feature allows locking each virtual memory area separately when
1255           handling page faults instead of taking mmap_lock.
1256
1257 config LOCK_MM_AND_FIND_VMA
1258         bool
1259         depends on !STACK_GROWSUP
1260
1261 source "mm/damon/Kconfig"
1262
1263 endmenu