1 # SPDX-License-Identifier: GPL-2.0-only
3 menu "Memory Management options"
5 config SELECT_MEMORY_MODEL
7 depends on ARCH_SELECT_MEMORY_MODEL
11 depends on SELECT_MEMORY_MODEL
12 default SPARSEMEM_MANUAL if ARCH_SPARSEMEM_DEFAULT
13 default FLATMEM_MANUAL
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.
22 depends on !ARCH_SPARSEMEM_ENABLE || ARCH_FLATMEM_ENABLE
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.
29 For systems that have holes in their physical address
30 spaces and for features like NUMA and memory hotplug,
31 choose "Sparse Memory".
33 If unsure, choose this option (Flat Memory) over any other.
35 config SPARSEMEM_MANUAL
37 depends on ARCH_SPARSEMEM_ENABLE
39 This will be the only option for some systems, including
40 memory hot-plug systems. This is normal.
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.
46 If unsure, choose "Flat Memory" over this option.
52 depends on (!SELECT_MEMORY_MODEL && ARCH_SPARSEMEM_ENABLE) || SPARSEMEM_MANUAL
56 depends on !SPARSEMEM || FLATMEM_MANUAL
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.
65 # This option will also potentially produce smaller runtime code
66 # with gcc 3.4 and later.
68 config SPARSEMEM_STATIC
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.
76 config SPARSEMEM_EXTREME
78 depends on SPARSEMEM && !SPARSEMEM_STATIC
80 config SPARSEMEM_VMEMMAP_ENABLE
83 config SPARSEMEM_VMEMMAP
84 bool "Sparse Memory virtual memmap"
85 depends on SPARSEMEM && SPARSEMEM_VMEMMAP_ENABLE
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.
92 config HAVE_MEMBLOCK_PHYS_MAP
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.
102 config ARCH_KEEP_MEMBLOCK
105 # Keep arch NUMA mapping infrastructure post-init.
106 config NUMA_KEEP_MEMINFO
109 config MEMORY_ISOLATION
113 # Only be set on architectures that have completely implemented memory hotplug
114 # feature. If you are not sure, don't touch it.
116 config HAVE_BOOTMEM_INFO_NODE
119 config ARCH_ENABLE_MEMORY_HOTPLUG
122 # eventually, we can have this option just 'select SPARSEMEM'
123 config 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
131 config MEMORY_HOTPLUG_SPARSE
133 depends on SPARSEMEM && MEMORY_HOTPLUG
135 config MEMORY_HOTPLUG_DEFAULT_ONLINE
136 bool "Online the newly added memory blocks by default"
137 depends on MEMORY_HOTPLUG
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.
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.
150 config ARCH_ENABLE_MEMORY_HOTREMOVE
153 config 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
159 config MHP_MEMMAP_ON_MEMORY
161 depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
162 depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
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.
175 config SPLIT_PTLOCK_CPUS
177 default "999999" if !MMU
178 default "999999" if ARM && !CPU_CACHE_VIPT
179 default "999999" if PARISC && !PA20
180 default "999999" if SPARC32
183 config ARCH_ENABLE_SPLIT_PMD_PTLOCK
187 # support for memory balloon
188 config MEMORY_BALLOON
192 # support for memory balloon compaction
193 config BALLOON_COMPACTION
194 bool "Allow for balloon memory compaction/migration"
196 depends on COMPACTION && MEMORY_BALLOON
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.
207 # support for memory compaction
209 bool "Allow for memory compaction"
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
224 # support for free page reporting
225 config PAGE_REPORTING
226 bool "Free page reporting"
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.
235 # support for page migration
238 bool "Page migration"
240 depends on (NUMA || ARCH_ENABLE_MEMORY_HOTREMOVE || COMPACTION || CMA) && MMU
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.
249 config ARCH_ENABLE_HUGEPAGE_MIGRATION
252 config ARCH_ENABLE_THP_MIGRATION
255 config HUGETLB_PAGE_SIZE_VARIABLE
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
263 def_bool (MEMORY_ISOLATION && COMPACTION) || CMA
265 config PHYS_ADDR_T_64BIT
269 bool "Enable bounce buffers"
271 depends on BLOCK && MMU && HIGHMEM
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.
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.
291 bool "Enable KSM for page merging"
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).
305 config DEFAULT_MMAP_MIN_ADDR
306 int "Low address space to protect from user allocation"
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.
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.
321 This value can be changed after boot using the
322 /proc/sys/vm/mmap_min_addr tunable.
324 config ARCH_SUPPORTS_MEMORY_FAILURE
327 config MEMORY_FAILURE
329 depends on ARCH_SUPPORTS_MEMORY_FAILURE
330 bool "Enable recovery from hardware memory errors"
331 select MEMORY_ISOLATION
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.
339 config HWPOISON_INJECT
340 tristate "HWPoison pages injector"
341 depends on MEMORY_FAILURE && DEBUG_KERNEL && PROC_FS
342 select PROC_PAGE_MONITOR
344 config NOMMU_INITIAL_TRIM_EXCESS
345 int "Turn on mmap() excess space trimming before booting"
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.
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.
359 If trimming is disabled, the excess is kept, but not used, which for
360 long-term mappings means that the space is wasted.
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.
367 This option specifies the initial value of this option. The default
368 of 1 says that all excess pages should be trimmed.
370 See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
372 config TRANSPARENT_HUGEPAGE
373 bool "Transparent Hugepage Support"
374 depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE
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.
385 If memory constrained on embedded, you may want to say N.
388 prompt "Transparent Hugepage Support sysfs defaults"
389 depends on TRANSPARENT_HUGEPAGE
390 default TRANSPARENT_HUGEPAGE_ALWAYS
392 Selects the sysfs defaults for Transparent Hugepage Support.
394 config TRANSPARENT_HUGEPAGE_ALWAYS
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.
401 config TRANSPARENT_HUGEPAGE_MADVISE
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
411 config ARCH_WANTS_THP_SWAP
416 depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP
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.
422 For selection by architectures with reasonable THP sizes.
425 # UP and nommu archs use km based percpu allocator
427 config NEED_PER_CPU_KM
433 bool "Enable cleancache driver to cache clean pages if tmem is present"
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.
452 If unsure, say Y to enable cleancache
455 bool "Enable frontswap to cache swap pages if tmem is present"
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.
468 If unsure, say Y to enable frontswap.
471 bool "Contiguous Memory Allocator"
474 select MEMORY_ISOLATION
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.
486 bool "CMA debug messages (DEVELOPMENT)"
487 depends on DEBUG_KERNEL && CMA
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.
495 bool "CMA debugfs interface"
496 depends on CMA && DEBUG_FS
498 Turns on the DebugFS interface for CMA.
501 bool "CMA information through sysfs interface"
502 depends on CMA && SYSFS
504 This option exposes some sysfs attributes to get information
508 int "Maximum count of the CMA areas"
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.
517 If unsure, leave the default value "7" in UMA and "19" in NUMA.
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
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.
529 See Documentation/admin-guide/mm/soft-dirty.rst for more details.
532 bool "Compressed cache for swap pages (EXPERIMENTAL)"
533 depends on FRONTSWAP && CRYPTO=y
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.
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.
550 prompt "Compressed cache for swap pages default compressor"
552 default ZSWAP_COMPRESSOR_DEFAULT_LZO
554 Selects the default compression algorithm for the compressed cache
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/
562 If in doubt, select 'LZO'.
564 The selection made here can be overridden by using the kernel
565 command line 'zswap.compressor=' option.
567 config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
569 select CRYPTO_DEFLATE
571 Use the Deflate algorithm as the default compression algorithm.
573 config ZSWAP_COMPRESSOR_DEFAULT_LZO
577 Use the LZO algorithm as the default compression algorithm.
579 config ZSWAP_COMPRESSOR_DEFAULT_842
583 Use the 842 algorithm as the default compression algorithm.
585 config ZSWAP_COMPRESSOR_DEFAULT_LZ4
589 Use the LZ4 algorithm as the default compression algorithm.
591 config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
595 Use the LZ4HC algorithm as the default compression algorithm.
597 config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
601 Use the zstd algorithm as the default compression algorithm.
604 config ZSWAP_COMPRESSOR_DEFAULT
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
616 prompt "Compressed cache for swap pages default allocator"
618 default ZSWAP_ZPOOL_DEFAULT_ZBUD
620 Selects the default allocator for the compressed cache for
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.
626 The selection made here can be overridden by using the kernel
627 command line 'zswap.zpool=' option.
629 config ZSWAP_ZPOOL_DEFAULT_ZBUD
633 Use the zbud allocator as the default allocator.
635 config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
639 Use the z3fold allocator as the default allocator.
641 config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
645 Use the zsmalloc allocator as the default allocator.
648 config ZSWAP_ZPOOL_DEFAULT
651 default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
652 default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
653 default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
656 config ZSWAP_DEFAULT_ON
657 bool "Enable the compressed cache for swap pages by default"
660 If selected, the compressed cache for swap pages will be enabled
661 at boot, otherwise it will be disabled.
663 The selection made here can be overridden by using the kernel
664 command line 'zswap.enabled=' option.
667 tristate "Common API for compressed memory storage"
669 Compressed memory storage API. This allows using either zbud or
673 tristate "Low (Up to 2x) density storage for compressed pages"
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.
683 tristate "Up to 3x density storage for compressed pages"
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
692 tristate "Memory allocator for compressed pages"
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.
703 bool "Export zsmalloc statistics"
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.
712 config GENERIC_EARLY_IOREMAP
715 config STACK_MAX_DEFAULT_SIZE_MB
716 int "Default maximum user stack size for 32-bit processes (MB)"
719 depends on STACK_GROWSUP && (!64BIT || COMPAT)
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.
725 A sane initial value is 100 MB.
727 config DEFERRED_STRUCT_PAGE_INIT
728 bool "Defer initialisation of struct pages to kthreads"
730 depends on !NEED_PER_CPU_KM
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
742 config PAGE_IDLE_FLAG
744 select PAGE_EXTENSION if !64BIT
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.
750 config IDLE_PAGE_TRACKING
751 bool "Enable idle page tracking"
752 depends on SYSFS && MMU
753 select PAGE_IDLE_FLAG
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.
760 See Documentation/admin-guide/mm/idle_page_tracking.rst for
763 config ARCH_HAS_CACHE_LINE_SIZE
766 config ARCH_HAS_PTE_DEVMAP
769 config ARCH_HAS_ZONE_DMA_SET
773 bool "Support DMA zone" if ARCH_HAS_ZONE_DMA_SET
774 default y if ARM64 || X86
777 bool "Support DMA32 zone" if ARCH_HAS_ZONE_DMA_SET
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
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.
796 If FS_DAX is enabled, then say Y.
798 config DEV_PAGEMAP_OPS
802 # Helpers to mirror range of the CPU page tables of a process into device page
809 config DEVICE_PRIVATE
810 bool "Unaddressable device memory (GPU memory, ...)"
811 depends on ZONE_DEVICE
812 select DEV_PAGEMAP_OPS
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.
822 config ARCH_USES_HIGH_VMA_FLAGS
824 config ARCH_HAS_PKEYS
828 bool "Collect percpu memory statistics"
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.
835 bool "Enable infrastructure for get_user_pages()-related unit tests"
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.
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.
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.
852 See tools/testing/selftests/vm/gup_test.c
854 comment "GUP_TEST needs to have DEBUG_FS enabled"
855 depends on !GUP_TEST && !DEBUG_FS
857 config GUP_GET_PTE_LOW_HIGH
860 config READ_ONLY_THP_FOR_FS
861 bool "Read-only THP for filesystems (EXPERIMENTAL)"
862 depends on TRANSPARENT_HUGEPAGE && SHMEM
865 Allow khugepaged to put read-only file-backed pages in THP.
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
871 config ARCH_HAS_PTE_SPECIAL
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
881 config ARCH_HAS_HUGEPD
884 config MAPPING_DIRTY_HELPERS
890 config KMAP_LOCAL_NON_LINEAR_PTE_ARRAY
893 # struct io_mapping based helper. Selected by drivers that need them
898 def_bool ARCH_HAS_SET_DIRECT_MAP && !EMBEDDED
900 source "mm/damon/Kconfig"