mm/migrate: Add filemap_migrate_folio()
[linux-2.6-microblaze.git] / mm / Kconfig
index 034d879..169e641 100644 (file)
@@ -2,6 +2,358 @@
 
 menu "Memory Management options"
 
+#
+# For some reason microblaze and nios2 hard code SWAP=n.  Hopefully we can
+# add proper SWAP support to them, in which case this can be remove.
+#
+config ARCH_NO_SWAP
+       bool
+
+config ZPOOL
+       bool
+
+menuconfig SWAP
+       bool "Support for paging of anonymous memory (swap)"
+       depends on MMU && BLOCK && !ARCH_NO_SWAP
+       default y
+       help
+         This option allows you to choose whether you want to have support
+         for so called swap devices or swap files in your kernel that are
+         used to provide more virtual memory than the actual RAM present
+         in your computer.  If unsure say Y.
+
+config ZSWAP
+       bool "Compressed cache for swap pages (EXPERIMENTAL)"
+       depends on SWAP
+       select FRONTSWAP
+       select CRYPTO
+       select ZPOOL
+       help
+         A lightweight compressed cache for swap pages.  It takes
+         pages that are in the process of being swapped out and attempts to
+         compress them into a dynamically allocated RAM-based memory pool.
+         This can result in a significant I/O reduction on swap device and,
+         in the case where decompressing from RAM is faster that swap device
+         reads, can also improve workload performance.
+
+         This is marked experimental because it is a new feature (as of
+         v3.11) that interacts heavily with memory reclaim.  While these
+         interactions don't cause any known issues on simple memory setups,
+         they have not be fully explored on the large set of potential
+         configurations and workloads that exist.
+
+config ZSWAP_DEFAULT_ON
+       bool "Enable the compressed cache for swap pages by default"
+       depends on ZSWAP
+       help
+         If selected, the compressed cache for swap pages will be enabled
+         at boot, otherwise it will be disabled.
+
+         The selection made here can be overridden by using the kernel
+         command line 'zswap.enabled=' option.
+
+choice
+       prompt "Default compressor"
+       depends on ZSWAP
+       default ZSWAP_COMPRESSOR_DEFAULT_LZO
+       help
+         Selects the default compression algorithm for the compressed cache
+         for swap pages.
+
+         For an overview what kind of performance can be expected from
+         a particular compression algorithm please refer to the benchmarks
+         available at the following LWN page:
+         https://lwn.net/Articles/751795/
+
+         If in doubt, select 'LZO'.
+
+         The selection made here can be overridden by using the kernel
+         command line 'zswap.compressor=' option.
+
+config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
+       bool "Deflate"
+       select CRYPTO_DEFLATE
+       help
+         Use the Deflate algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_LZO
+       bool "LZO"
+       select CRYPTO_LZO
+       help
+         Use the LZO algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_842
+       bool "842"
+       select CRYPTO_842
+       help
+         Use the 842 algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_LZ4
+       bool "LZ4"
+       select CRYPTO_LZ4
+       help
+         Use the LZ4 algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
+       bool "LZ4HC"
+       select CRYPTO_LZ4HC
+       help
+         Use the LZ4HC algorithm as the default compression algorithm.
+
+config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
+       bool "zstd"
+       select CRYPTO_ZSTD
+       help
+         Use the zstd algorithm as the default compression algorithm.
+endchoice
+
+config ZSWAP_COMPRESSOR_DEFAULT
+       string
+       depends on ZSWAP
+       default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
+       default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
+       default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
+       default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
+       default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
+       default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
+       default ""
+
+choice
+       prompt "Default allocator"
+       depends on ZSWAP
+       default ZSWAP_ZPOOL_DEFAULT_ZBUD
+       help
+         Selects the default allocator for the compressed cache for
+         swap pages.
+         The default is 'zbud' for compatibility, however please do
+         read the description of each of the allocators below before
+         making a right choice.
+
+         The selection made here can be overridden by using the kernel
+         command line 'zswap.zpool=' option.
+
+config ZSWAP_ZPOOL_DEFAULT_ZBUD
+       bool "zbud"
+       select ZBUD
+       help
+         Use the zbud allocator as the default allocator.
+
+config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
+       bool "z3fold"
+       select Z3FOLD
+       help
+         Use the z3fold allocator as the default allocator.
+
+config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
+       bool "zsmalloc"
+       select ZSMALLOC
+       help
+         Use the zsmalloc allocator as the default allocator.
+endchoice
+
+config ZSWAP_ZPOOL_DEFAULT
+       string
+       depends on ZSWAP
+       default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
+       default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
+       default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
+       default ""
+
+config ZBUD
+       tristate "2:1 compression allocator (zbud)"
+       depends on ZSWAP
+       help
+         A special purpose allocator for storing compressed pages.
+         It is designed to store up to two compressed pages per physical
+         page.  While this design limits storage density, it has simple and
+         deterministic reclaim properties that make it preferable to a higher
+         density approach when reclaim will be used.
+
+config Z3FOLD
+       tristate "3:1 compression allocator (z3fold)"
+       depends on ZSWAP
+       help
+         A special purpose allocator for storing compressed pages.
+         It is designed to store up to three compressed pages per physical
+         page. It is a ZBUD derivative so the simplicity and determinism are
+         still there.
+
+config ZSMALLOC
+       tristate
+       prompt "N:1 compression allocator (zsmalloc)" if ZSWAP
+       depends on MMU
+       help
+         zsmalloc is a slab-based memory allocator designed to store
+         pages of various compression levels efficiently. It achieves
+         the highest storage density with the least amount of fragmentation.
+
+config ZSMALLOC_STAT
+       bool "Export zsmalloc statistics"
+       depends on ZSMALLOC
+       select DEBUG_FS
+       help
+         This option enables code in the zsmalloc to collect various
+         statistics about what's happening in zsmalloc and exports that
+         information to userspace via debugfs.
+         If unsure, say N.
+
+menu "SLAB allocator options"
+
+choice
+       prompt "Choose SLAB allocator"
+       default SLUB
+       help
+          This option allows to select a slab allocator.
+
+config SLAB
+       bool "SLAB"
+       depends on !PREEMPT_RT
+       select HAVE_HARDENED_USERCOPY_ALLOCATOR
+       help
+         The regular slab allocator that is established and known to work
+         well in all environments. It organizes cache hot objects in
+         per cpu and per node queues.
+
+config SLUB
+       bool "SLUB (Unqueued Allocator)"
+       select HAVE_HARDENED_USERCOPY_ALLOCATOR
+       help
+          SLUB is a slab allocator that minimizes cache line usage
+          instead of managing queues of cached objects (SLAB approach).
+          Per cpu caching is realized using slabs of objects instead
+          of queues of objects. SLUB can use memory efficiently
+          and has enhanced diagnostics. SLUB is the default choice for
+          a slab allocator.
+
+config SLOB
+       depends on EXPERT
+       bool "SLOB (Simple Allocator)"
+       depends on !PREEMPT_RT
+       help
+          SLOB replaces the stock allocator with a drastically simpler
+          allocator. SLOB is generally more space efficient but
+          does not perform as well on large systems.
+
+endchoice
+
+config SLAB_MERGE_DEFAULT
+       bool "Allow slab caches to be merged"
+       default y
+       depends on SLAB || SLUB
+       help
+         For reduced kernel memory fragmentation, slab caches can be
+         merged when they share the same size and other characteristics.
+         This carries a risk of kernel heap overflows being able to
+         overwrite objects from merged caches (and more easily control
+         cache layout), which makes such heap attacks easier to exploit
+         by attackers. By keeping caches unmerged, these kinds of exploits
+         can usually only damage objects in the same cache. To disable
+         merging at runtime, "slab_nomerge" can be passed on the kernel
+         command line.
+
+config SLAB_FREELIST_RANDOM
+       bool "Randomize slab freelist"
+       depends on SLAB || SLUB
+       help
+         Randomizes the freelist order used on creating new pages. This
+         security feature reduces the predictability of the kernel slab
+         allocator against heap overflows.
+
+config SLAB_FREELIST_HARDENED
+       bool "Harden slab freelist metadata"
+       depends on SLAB || SLUB
+       help
+         Many kernel heap attacks try to target slab cache metadata and
+         other infrastructure. This options makes minor performance
+         sacrifices to harden the kernel slab allocator against common
+         freelist exploit methods. Some slab implementations have more
+         sanity-checking than others. This option is most effective with
+         CONFIG_SLUB.
+
+config SLUB_STATS
+       default n
+       bool "Enable SLUB performance statistics"
+       depends on SLUB && SYSFS
+       help
+         SLUB statistics are useful to debug SLUBs allocation behavior in
+         order find ways to optimize the allocator. This should never be
+         enabled for production use since keeping statistics slows down
+         the allocator by a few percentage points. The slabinfo command
+         supports the determination of the most active slabs to figure
+         out which slabs are relevant to a particular load.
+         Try running: slabinfo -DA
+
+config SLUB_CPU_PARTIAL
+       default y
+       depends on SLUB && SMP
+       bool "SLUB per cpu partial cache"
+       help
+         Per cpu partial caches accelerate objects allocation and freeing
+         that is local to a processor at the price of more indeterminism
+         in the latency of the free. On overflow these caches will be cleared
+         which requires the taking of locks that may cause latency spikes.
+         Typically one would choose no for a realtime system.
+
+endmenu # SLAB allocator options
+
+config SHUFFLE_PAGE_ALLOCATOR
+       bool "Page allocator randomization"
+       default SLAB_FREELIST_RANDOM && ACPI_NUMA
+       help
+         Randomization of the page allocator improves the average
+         utilization of a direct-mapped memory-side-cache. See section
+         5.2.27 Heterogeneous Memory Attribute Table (HMAT) in the ACPI
+         6.2a specification for an example of how a platform advertises
+         the presence of a memory-side-cache. There are also incidental
+         security benefits as it reduces the predictability of page
+         allocations to compliment SLAB_FREELIST_RANDOM, but the
+         default granularity of shuffling on the "MAX_ORDER - 1" i.e,
+         10th order of pages is selected based on cache utilization
+         benefits on x86.
+
+         While the randomization improves cache utilization it may
+         negatively impact workloads on platforms without a cache. For
+         this reason, by default, the randomization is enabled only
+         after runtime detection of a direct-mapped memory-side-cache.
+         Otherwise, the randomization may be force enabled with the
+         'page_alloc.shuffle' kernel command line parameter.
+
+         Say Y if unsure.
+
+config COMPAT_BRK
+       bool "Disable heap randomization"
+       default y
+       help
+         Randomizing heap placement makes heap exploits harder, but it
+         also breaks ancient binaries (including anything libc5 based).
+         This option changes the bootup default to heap randomization
+         disabled, and can be overridden at runtime by setting
+         /proc/sys/kernel/randomize_va_space to 2.
+
+         On non-ancient distros (post-2000 ones) N is usually a safe choice.
+
+config MMAP_ALLOW_UNINITIALIZED
+       bool "Allow mmapped anonymous memory to be uninitialized"
+       depends on EXPERT && !MMU
+       default n
+       help
+         Normally, and according to the Linux spec, anonymous memory obtained
+         from mmap() has its contents cleared before it is passed to
+         userspace.  Enabling this config option allows you to request that
+         mmap() skip that if it is given an MAP_UNINITIALIZED flag, thus
+         providing a huge performance boost.  If this option is not enabled,
+         then the flag will be ignored.
+
+         This is taken advantage of by uClibc's malloc(), and also by
+         ELF-FDPIC binfmt's brk and stack allocator.
+
+         Because of the obvious security issues, this option should only be
+         enabled on embedded devices where you control what is run in
+         userspace.  Since that isn't generally a problem on no-MMU systems,
+         it is normally safe to say Y here.
+
+         See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
+
 config SELECT_MEMORY_MODEL
        def_bool y
        depends on ARCH_SELECT_MEMORY_MODEL
@@ -126,15 +478,20 @@ config HAVE_BOOTMEM_INFO_NODE
 config ARCH_ENABLE_MEMORY_HOTPLUG
        bool
 
+config ARCH_ENABLE_MEMORY_HOTREMOVE
+       bool
+
 # eventually, we can have this option just 'select SPARSEMEM'
-config MEMORY_HOTPLUG
-       bool "Allow for memory hot-add"
+menuconfig MEMORY_HOTPLUG
+       bool "Memory hotplug"
        select MEMORY_ISOLATION
        depends on SPARSEMEM
        depends on ARCH_ENABLE_MEMORY_HOTPLUG
        depends on 64BIT
        select NUMA_KEEP_MEMINFO if NUMA
 
+if MEMORY_HOTPLUG
+
 config MEMORY_HOTPLUG_DEFAULT_ONLINE
        bool "Online the newly added memory blocks by default"
        depends on MEMORY_HOTPLUG
@@ -150,9 +507,6 @@ config MEMORY_HOTPLUG_DEFAULT_ONLINE
          Say N here if you want the default policy to keep all hot-plugged
          memory blocks in 'offline' state.
 
-config ARCH_ENABLE_MEMORY_HOTREMOVE
-       bool
-
 config MEMORY_HOTREMOVE
        bool "Allow for memory hot remove"
        select HAVE_BOOTMEM_INFO_NODE if (X86_64 || PPC64)
@@ -164,6 +518,8 @@ config MHP_MEMMAP_ON_MEMORY
        depends on MEMORY_HOTPLUG && SPARSEMEM_VMEMMAP
        depends on ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
 
+endif # MEMORY_HOTPLUG
+
 # Heavily threaded applications may benefit from splitting the mm-wide
 # page_table_lock, so that faults on different parts of the user address
 # space can be handled with less contention: split it at this NR_CPUS.
@@ -378,7 +734,13 @@ config NOMMU_INITIAL_TRIM_EXCESS
 
          See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
 
-config TRANSPARENT_HUGEPAGE
+config ARCH_WANT_GENERAL_HUGETLB
+       bool
+
+config ARCH_WANTS_THP_SWAP
+       def_bool n
+
+menuconfig TRANSPARENT_HUGEPAGE
        bool "Transparent Hugepage Support"
        depends on HAVE_ARCH_TRANSPARENT_HUGEPAGE && !PREEMPT_RT
        select COMPACTION
@@ -393,6 +755,8 @@ config TRANSPARENT_HUGEPAGE
 
          If memory constrained on embedded, you may want to say N.
 
+if TRANSPARENT_HUGEPAGE
+
 choice
        prompt "Transparent Hugepage Support sysfs defaults"
        depends on TRANSPARENT_HUGEPAGE
@@ -417,12 +781,6 @@ choice
          benefit.
 endchoice
 
-config ARCH_WANT_GENERAL_HUGETLB
-       bool
-
-config ARCH_WANTS_THP_SWAP
-       def_bool n
-
 config THP_SWAP
        def_bool y
        depends on TRANSPARENT_HUGEPAGE && ARCH_WANTS_THP_SWAP && SWAP
@@ -433,6 +791,19 @@ config THP_SWAP
 
          For selection by architectures with reasonable THP sizes.
 
+config READ_ONLY_THP_FOR_FS
+       bool "Read-only THP for filesystems (EXPERIMENTAL)"
+       depends on TRANSPARENT_HUGEPAGE && SHMEM
+
+       help
+         Allow khugepaged to put read-only file-backed pages in THP.
+
+         This is marked experimental because it is a new feature. Write
+         support of file THPs will be developed in the next few release
+         cycles.
+
+endif # TRANSPARENT_HUGEPAGE
+
 #
 # UP and nommu archs use km based percpu allocator
 #
@@ -517,188 +888,6 @@ config MEM_SOFT_DIRTY
 
          See Documentation/admin-guide/mm/soft-dirty.rst for more details.
 
-config ZSWAP
-       bool "Compressed cache for swap pages (EXPERIMENTAL)"
-       depends on SWAP && CRYPTO=y
-       select FRONTSWAP
-       select ZPOOL
-       help
-         A lightweight compressed cache for swap pages.  It takes
-         pages that are in the process of being swapped out and attempts to
-         compress them into a dynamically allocated RAM-based memory pool.
-         This can result in a significant I/O reduction on swap device and,
-         in the case where decompressing from RAM is faster that swap device
-         reads, can also improve workload performance.
-
-         This is marked experimental because it is a new feature (as of
-         v3.11) that interacts heavily with memory reclaim.  While these
-         interactions don't cause any known issues on simple memory setups,
-         they have not be fully explored on the large set of potential
-         configurations and workloads that exist.
-
-choice
-       prompt "Compressed cache for swap pages default compressor"
-       depends on ZSWAP
-       default ZSWAP_COMPRESSOR_DEFAULT_LZO
-       help
-         Selects the default compression algorithm for the compressed cache
-         for swap pages.
-
-         For an overview what kind of performance can be expected from
-         a particular compression algorithm please refer to the benchmarks
-         available at the following LWN page:
-         https://lwn.net/Articles/751795/
-
-         If in doubt, select 'LZO'.
-
-         The selection made here can be overridden by using the kernel
-         command line 'zswap.compressor=' option.
-
-config ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
-       bool "Deflate"
-       select CRYPTO_DEFLATE
-       help
-         Use the Deflate algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_LZO
-       bool "LZO"
-       select CRYPTO_LZO
-       help
-         Use the LZO algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_842
-       bool "842"
-       select CRYPTO_842
-       help
-         Use the 842 algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_LZ4
-       bool "LZ4"
-       select CRYPTO_LZ4
-       help
-         Use the LZ4 algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
-       bool "LZ4HC"
-       select CRYPTO_LZ4HC
-       help
-         Use the LZ4HC algorithm as the default compression algorithm.
-
-config ZSWAP_COMPRESSOR_DEFAULT_ZSTD
-       bool "zstd"
-       select CRYPTO_ZSTD
-       help
-         Use the zstd algorithm as the default compression algorithm.
-endchoice
-
-config ZSWAP_COMPRESSOR_DEFAULT
-       string
-       depends on ZSWAP
-       default "deflate" if ZSWAP_COMPRESSOR_DEFAULT_DEFLATE
-       default "lzo" if ZSWAP_COMPRESSOR_DEFAULT_LZO
-       default "842" if ZSWAP_COMPRESSOR_DEFAULT_842
-       default "lz4" if ZSWAP_COMPRESSOR_DEFAULT_LZ4
-       default "lz4hc" if ZSWAP_COMPRESSOR_DEFAULT_LZ4HC
-       default "zstd" if ZSWAP_COMPRESSOR_DEFAULT_ZSTD
-       default ""
-
-choice
-       prompt "Compressed cache for swap pages default allocator"
-       depends on ZSWAP
-       default ZSWAP_ZPOOL_DEFAULT_ZBUD
-       help
-         Selects the default allocator for the compressed cache for
-         swap pages.
-         The default is 'zbud' for compatibility, however please do
-         read the description of each of the allocators below before
-         making a right choice.
-
-         The selection made here can be overridden by using the kernel
-         command line 'zswap.zpool=' option.
-
-config ZSWAP_ZPOOL_DEFAULT_ZBUD
-       bool "zbud"
-       select ZBUD
-       help
-         Use the zbud allocator as the default allocator.
-
-config ZSWAP_ZPOOL_DEFAULT_Z3FOLD
-       bool "z3fold"
-       select Z3FOLD
-       help
-         Use the z3fold allocator as the default allocator.
-
-config ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
-       bool "zsmalloc"
-       select ZSMALLOC
-       help
-         Use the zsmalloc allocator as the default allocator.
-endchoice
-
-config ZSWAP_ZPOOL_DEFAULT
-       string
-       depends on ZSWAP
-       default "zbud" if ZSWAP_ZPOOL_DEFAULT_ZBUD
-       default "z3fold" if ZSWAP_ZPOOL_DEFAULT_Z3FOLD
-       default "zsmalloc" if ZSWAP_ZPOOL_DEFAULT_ZSMALLOC
-       default ""
-
-config ZSWAP_DEFAULT_ON
-       bool "Enable the compressed cache for swap pages by default"
-       depends on ZSWAP
-       help
-         If selected, the compressed cache for swap pages will be enabled
-         at boot, otherwise it will be disabled.
-
-         The selection made here can be overridden by using the kernel
-         command line 'zswap.enabled=' option.
-
-config ZPOOL
-       tristate "Common API for compressed memory storage"
-       help
-         Compressed memory storage API.  This allows using either zbud or
-         zsmalloc.
-
-config ZBUD
-       tristate "Low (Up to 2x) density storage for compressed pages"
-       depends on ZPOOL
-       help
-         A special purpose allocator for storing compressed pages.
-         It is designed to store up to two compressed pages per physical
-         page.  While this design limits storage density, it has simple and
-         deterministic reclaim properties that make it preferable to a higher
-         density approach when reclaim will be used.
-
-config Z3FOLD
-       tristate "Up to 3x density storage for compressed pages"
-       depends on ZPOOL
-       help
-         A special purpose allocator for storing compressed pages.
-         It is designed to store up to three compressed pages per physical
-         page. It is a ZBUD derivative so the simplicity and determinism are
-         still there.
-
-config ZSMALLOC
-       tristate "Memory allocator for compressed pages"
-       depends on MMU
-       help
-         zsmalloc is a slab-based memory allocator designed to store
-         compressed RAM pages.  zsmalloc uses virtual memory mapping
-         in order to reduce fragmentation.  However, this results in a
-         non-standard allocator interface where a handle, not a pointer, is
-         returned by an alloc().  This handle must be mapped in order to
-         access the allocated space.
-
-config ZSMALLOC_STAT
-       bool "Export zsmalloc statistics"
-       depends on ZSMALLOC
-       select DEBUG_FS
-       help
-         This option enables code in the zsmalloc to collect various
-         statistics about what's happening in zsmalloc and exports that
-         information to userspace via debugfs.
-         If unsure, say N.
-
 config GENERIC_EARLY_IOREMAP
        bool
 
@@ -762,7 +951,7 @@ config ARCH_HAS_CURRENT_STACK_POINTER
          register alias named "current_stack_pointer", this config can be
          selected.
 
-config ARCH_HAS_FILTER_PGPROT
+config ARCH_HAS_VM_GET_PAGE_PROT
        bool
 
 config ARCH_HAS_PTE_DEVMAP
@@ -822,6 +1011,15 @@ config ARCH_USES_HIGH_VMA_FLAGS
 config ARCH_HAS_PKEYS
        bool
 
+config VM_EVENT_COUNTERS
+       default y
+       bool "Enable VM event counters for /proc/vmstat" if EXPERT
+       help
+         VM event counters are needed for event counts to be shown.
+         This option allows the disabling of the VM event counters
+         on EXPERT systems.  /proc/vmstat will only show page counts
+         if VM event counters are disabled.
+
 config PERCPU_STATS
        bool "Collect percpu memory statistics"
        help
@@ -855,17 +1053,6 @@ comment "GUP_TEST needs to have DEBUG_FS enabled"
 config GUP_GET_PTE_LOW_HIGH
        bool
 
-config READ_ONLY_THP_FOR_FS
-       bool "Read-only THP for filesystems (EXPERIMENTAL)"
-       depends on TRANSPARENT_HUGEPAGE && SHMEM
-
-       help
-         Allow khugepaged to put read-only file-backed pages in THP.
-
-         This is marked experimental because it is a new feature. Write
-         support of file THPs will be developed in the next few release
-         cycles.
-
 config ARCH_HAS_PTE_SPECIAL
        bool
 
@@ -909,6 +1096,40 @@ config ANON_VMA_NAME
          area from being merged with adjacent virtual memory areas due to the
          difference in their name.
 
+config USERFAULTFD
+       bool "Enable userfaultfd() system call"
+       depends on MMU
+       help
+         Enable the userfaultfd() system call that allows to intercept and
+         handle page faults in userland.
+
+config HAVE_ARCH_USERFAULTFD_WP
+       bool
+       help
+         Arch has userfaultfd write protection support
+
+config HAVE_ARCH_USERFAULTFD_MINOR
+       bool
+       help
+         Arch has userfaultfd minor fault support
+
+config PTE_MARKER
+       bool
+
+       help
+         Allows to create marker PTEs for file-backed memory.
+
+config PTE_MARKER_UFFD_WP
+       bool "Userfaultfd write protection support for shmem/hugetlbfs"
+       default y
+       depends on HAVE_ARCH_USERFAULTFD_WP
+       select PTE_MARKER
+
+       help
+         Allows to create marker PTEs for userfaultfd write protection
+         purposes.  It is required to enable userfaultfd write protection on
+         file-backed memory types like shmem and hugetlbfs.
+
 source "mm/damon/Kconfig"
 
 endmenu