| 1 | # SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | menu "UML-specific options" |
| 4 | |
| 5 | config UML |
| 6 | bool |
| 7 | default y |
| 8 | select ARCH_DISABLE_KASAN_INLINE if STATIC_LINK |
| 9 | select ARCH_NEEDS_DEFER_KASAN if STATIC_LINK |
| 10 | select ARCH_WANTS_DYNAMIC_TASK_STRUCT |
| 11 | select ARCH_HAS_CACHE_LINE_SIZE |
| 12 | select ARCH_HAS_CPU_FINALIZE_INIT |
| 13 | select ARCH_HAS_FORTIFY_SOURCE |
| 14 | # Clang 20 & 21 miscompute __builtin_object_size() under -fprofile-arcs |
| 15 | # on 32-bit, causing spurious compile-time errors in check_copy_size(). |
| 16 | select ARCH_HAS_GCOV_PROFILE_ALL if !(!64BIT && CLANG_VERSION >= 200000 && CLANG_VERSION < 220100) |
| 17 | select ARCH_HAS_KCOV |
| 18 | select ARCH_HAS_STRNCPY_FROM_USER |
| 19 | select ARCH_HAS_STRNLEN_USER |
| 20 | select ARCH_HAS_STRICT_KERNEL_RWX |
| 21 | select HAVE_ARCH_AUDITSYSCALL |
| 22 | select HAVE_ARCH_KASAN if X86_64 |
| 23 | select HAVE_ARCH_KASAN_VMALLOC if HAVE_ARCH_KASAN |
| 24 | select HAVE_ARCH_SECCOMP_FILTER |
| 25 | select HAVE_ASM_MODVERSIONS |
| 26 | select HAVE_UID16 |
| 27 | select HAVE_DEBUG_KMEMLEAK |
| 28 | select HAVE_DEBUG_BUGVERBOSE |
| 29 | select HAVE_PAGE_SIZE_4KB |
| 30 | select NO_DMA if !UML_DMA_EMULATION |
| 31 | select OF_EARLY_FLATTREE if OF |
| 32 | select GENERIC_IRQ_SHOW |
| 33 | select GENERIC_CPU_DEVICES |
| 34 | select GENERIC_SMP_IDLE_THREAD |
| 35 | select HAVE_GCC_PLUGINS |
| 36 | select ARCH_SUPPORTS_LTO_CLANG |
| 37 | select ARCH_SUPPORTS_LTO_CLANG_THIN |
| 38 | select TRACE_IRQFLAGS_SUPPORT |
| 39 | select TTY # Needed for line.c |
| 40 | select HAVE_ARCH_VMAP_STACK |
| 41 | select HAVE_RUST |
| 42 | select ARCH_HAS_UBSAN |
| 43 | select HAVE_ARCH_TRACEHOOK |
| 44 | select HAVE_SYSCALL_TRACEPOINTS |
| 45 | select THREAD_INFO_IN_TASK |
| 46 | select SPARSE_IRQ |
| 47 | select MMU_GATHER_RCU_TABLE_FREE |
| 48 | |
| 49 | config MMU |
| 50 | bool |
| 51 | default y |
| 52 | |
| 53 | config UML_DMA_EMULATION |
| 54 | bool |
| 55 | |
| 56 | config NO_IOMEM |
| 57 | bool "disable IOMEM" if EXPERT |
| 58 | depends on !INDIRECT_IOMEM |
| 59 | default y |
| 60 | |
| 61 | config UML_IOMEM_EMULATION |
| 62 | bool |
| 63 | select INDIRECT_IOMEM |
| 64 | select GENERIC_PCI_IOMAP |
| 65 | |
| 66 | config ISA |
| 67 | bool |
| 68 | |
| 69 | config SBUS |
| 70 | bool |
| 71 | |
| 72 | config LOCKDEP_SUPPORT |
| 73 | bool |
| 74 | default y |
| 75 | |
| 76 | config STACKTRACE_SUPPORT |
| 77 | bool |
| 78 | default y |
| 79 | select STACKTRACE |
| 80 | |
| 81 | config GENERIC_CALIBRATE_DELAY |
| 82 | bool |
| 83 | default y |
| 84 | |
| 85 | config HZ |
| 86 | int |
| 87 | default 100 |
| 88 | |
| 89 | config UML_SUBARCH_SUPPORTS_SMP |
| 90 | bool |
| 91 | |
| 92 | config SMP |
| 93 | bool "Symmetric multi-processing support" |
| 94 | default n |
| 95 | depends on UML_SUBARCH_SUPPORTS_SMP |
| 96 | help |
| 97 | This option enables UML SMP support. |
| 98 | |
| 99 | With this enabled, users can tell UML to start multiple virtual |
| 100 | processors. Each virtual processor is represented as a separate |
| 101 | host thread. |
| 102 | |
| 103 | In UML, kthreads and normal threads (when running in kernel mode) |
| 104 | can be scheduled and executed simultaneously on different virtual |
| 105 | processors. However, the userspace code of normal threads still |
| 106 | runs within their respective single-threaded stubs. |
| 107 | |
| 108 | That is, SMP support is available both within the kernel and |
| 109 | across different processes, but remains limited within threads |
| 110 | of the same process in userspace. |
| 111 | |
| 112 | config NR_CPUS_RANGE_BEGIN |
| 113 | int |
| 114 | default 1 if !SMP |
| 115 | default 2 |
| 116 | |
| 117 | config NR_CPUS_RANGE_END |
| 118 | int |
| 119 | default 1 if !SMP |
| 120 | default 64 |
| 121 | |
| 122 | config NR_CPUS_DEFAULT |
| 123 | int |
| 124 | default 1 if !SMP |
| 125 | default 2 |
| 126 | |
| 127 | config NR_CPUS |
| 128 | int "Maximum number of CPUs" if SMP |
| 129 | range NR_CPUS_RANGE_BEGIN NR_CPUS_RANGE_END |
| 130 | default NR_CPUS_DEFAULT |
| 131 | |
| 132 | source "arch/$(HEADER_ARCH)/um/Kconfig" |
| 133 | |
| 134 | config MAY_HAVE_RUNTIME_DEPS |
| 135 | bool |
| 136 | |
| 137 | config STATIC_LINK |
| 138 | bool "Force a static link" |
| 139 | depends on !MAY_HAVE_RUNTIME_DEPS |
| 140 | help |
| 141 | This option gives you the ability to force a static link of UML. |
| 142 | Normally, UML is linked as a shared binary. This is inconvenient for |
| 143 | use in a chroot jail. So, if you intend to run UML inside a chroot, |
| 144 | you probably want to say Y here. |
| 145 | Additionally, this option enables using higher memory spaces (up to |
| 146 | 2.75G) for UML. |
| 147 | |
| 148 | NOTE: This option is incompatible with some networking features which |
| 149 | depend on features that require being dynamically loaded (like NSS). |
| 150 | |
| 151 | config LD_SCRIPT_STATIC |
| 152 | bool |
| 153 | default y |
| 154 | depends on STATIC_LINK |
| 155 | |
| 156 | config LD_SCRIPT_DYN |
| 157 | bool |
| 158 | default y |
| 159 | depends on !LD_SCRIPT_STATIC |
| 160 | |
| 161 | config LD_SCRIPT_DYN_RPATH |
| 162 | bool "set rpath in the binary" if EXPERT |
| 163 | default y |
| 164 | depends on LD_SCRIPT_DYN |
| 165 | help |
| 166 | Add /lib (and /lib64 for 64-bit) to the linux binary's rpath |
| 167 | explicitly. |
| 168 | |
| 169 | You may need to turn this off if compiling for nix systems |
| 170 | that have their libraries in random /nix directories and |
| 171 | might otherwise unexpected use libraries from /lib or /lib64 |
| 172 | instead of the desired ones. |
| 173 | |
| 174 | config HOSTFS |
| 175 | tristate "Host filesystem" |
| 176 | help |
| 177 | While the User-Mode Linux port uses its own root file system for |
| 178 | booting and normal file access, this module lets the UML user |
| 179 | access files stored on the host. It does not require any |
| 180 | network connection between the Host and UML. An example use of |
| 181 | this might be: |
| 182 | |
| 183 | mount none /tmp/fromhost -t hostfs -o /tmp/umlshare |
| 184 | |
| 185 | where /tmp/fromhost is an empty directory inside UML and |
| 186 | /tmp/umlshare is a directory on the host with files the UML user |
| 187 | wishes to access. |
| 188 | |
| 189 | For more information, see |
| 190 | <http://user-mode-linux.sourceforge.net/hostfs.html>. |
| 191 | |
| 192 | If you'd like to be able to work with files stored on the host, |
| 193 | say Y or M here; otherwise say N. |
| 194 | |
| 195 | config MCONSOLE |
| 196 | bool "Management console" |
| 197 | depends on PROC_FS |
| 198 | default y |
| 199 | help |
| 200 | The user mode linux management console is a low-level interface to |
| 201 | the kernel, somewhat like the i386 SysRq interface. Since there is |
| 202 | a full-blown operating system running under every user mode linux |
| 203 | instance, there is much greater flexibility possible than with the |
| 204 | SysRq mechanism. |
| 205 | |
| 206 | If you answer 'Y' to this option, to use this feature, you need the |
| 207 | mconsole client (called uml_mconsole) which is present in CVS in |
| 208 | 2.4.5-9um and later (path /tools/mconsole), and is also in the |
| 209 | distribution RPM package in 2.4.6 and later. |
| 210 | |
| 211 | It is safe to say 'Y' here. |
| 212 | |
| 213 | config MAGIC_SYSRQ |
| 214 | bool "Magic SysRq key" |
| 215 | depends on MCONSOLE |
| 216 | help |
| 217 | If you say Y here, you will have some control over the system even |
| 218 | if the system crashes for example during kernel debugging (e.g., you |
| 219 | will be able to flush the buffer cache to disk, reboot the system |
| 220 | immediately or dump some status information). A key for each of the |
| 221 | possible requests is provided. |
| 222 | |
| 223 | This is the feature normally accomplished by pressing a key |
| 224 | while holding SysRq (Alt+PrintScreen). |
| 225 | |
| 226 | On UML, this is accomplished by sending a "sysrq" command with |
| 227 | mconsole, followed by the letter for the requested command. |
| 228 | |
| 229 | The keys are documented in <file:Documentation/admin-guide/sysrq.rst>. Don't say Y |
| 230 | unless you really know what this hack does. |
| 231 | |
| 232 | config KERNEL_STACK_ORDER |
| 233 | int "Kernel stack size order" |
| 234 | default 2 if 64BIT |
| 235 | range 2 10 if 64BIT |
| 236 | default 1 if !64BIT |
| 237 | help |
| 238 | This option determines the size of UML kernel stacks. They will |
| 239 | be 1 << order pages. The default is OK unless you're running Valgrind |
| 240 | on UML, in which case, set this to 3. |
| 241 | It is possible to reduce the stack to 1 for 64BIT and 0 for 32BIT on |
| 242 | older (pre-2017) CPUs. It is not recommended on newer CPUs due to the |
| 243 | increase in the size of the state which needs to be saved when handling |
| 244 | signals. |
| 245 | |
| 246 | config PGTABLE_LEVELS |
| 247 | int |
| 248 | default 4 if 64BIT |
| 249 | default 2 if !64BIT |
| 250 | |
| 251 | config UML_TIME_TRAVEL_SUPPORT |
| 252 | bool |
| 253 | prompt "Support time-travel mode (e.g. for test execution)" |
| 254 | # inf-cpu mode is incompatible with the benchmarking |
| 255 | depends on !RAID6_PQ_BENCHMARK |
| 256 | depends on !SMP |
| 257 | help |
| 258 | Enable this option to support time travel inside the UML instance. |
| 259 | |
| 260 | After enabling this option, two modes are accessible at runtime |
| 261 | (selected by the kernel command line), see the kernel's command- |
| 262 | line help for more details. |
| 263 | |
| 264 | It is safe to say Y, but you probably don't need this. |
| 265 | |
| 266 | config UML_MAX_USERSPACE_ITERATIONS |
| 267 | int |
| 268 | prompt "Maximum number of unscheduled userspace iterations" |
| 269 | default 10000 |
| 270 | depends on UML_TIME_TRAVEL_SUPPORT |
| 271 | help |
| 272 | In UML inf-cpu and ext time-travel mode userspace can run without being |
| 273 | interrupted. This will eventually overwhelm the kernel and create OOM |
| 274 | situations (mainly RCU not running). This setting specifies the number |
| 275 | of kernel/userspace switches (minor/major page fault, signal or syscall) |
| 276 | for the same userspace thread before the sched_clock is advanced by a |
| 277 | jiffie to trigger scheduling. |
| 278 | |
| 279 | Setting it to zero disables the feature. |
| 280 | |
| 281 | config KASAN_SHADOW_OFFSET |
| 282 | hex |
| 283 | depends on KASAN |
| 284 | default 0x100000000000 |
| 285 | help |
| 286 | This is the offset at which the ~16TB of shadow memory is |
| 287 | mapped and used by KASAN for memory debugging. This can be any |
| 288 | address that has at least KASAN_SHADOW_SIZE (total address space divided |
| 289 | by 8) amount of space so that the KASAN shadow memory does not conflict |
| 290 | with anything. The default is 0x100000000000, which works even if mem is |
| 291 | set to a large value. On low-memory systems, try 0x7fff8000, as it fits |
| 292 | into the immediate of most instructions, improving performance. |
| 293 | |
| 294 | endmenu |
| 295 | |
| 296 | source "arch/um/drivers/Kconfig" |
| 297 | |
| 298 | config ARCH_SUSPEND_POSSIBLE |
| 299 | def_bool y |
| 300 | depends on !SMP |
| 301 | |
| 302 | menu "Power management options" |
| 303 | |
| 304 | source "kernel/power/Kconfig" |
| 305 | |
| 306 | endmenu |