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