Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1# SPDX-License-Identifier: GPL-2.0-only
2config CC_VERSION_TEXT
3 string
4 default "$(CC_VERSION_TEXT)"
5 help
6 This is used in unclear ways:
7
8 - Re-run Kconfig when the compiler is updated
9 The 'default' property references the environment variable,
10 CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd.
11 When the compiler is updated, Kconfig will be invoked.
12
13 - Ensure full rebuild when the compiler is updated
14 include/linux/compiler-version.h contains this option in the comment
15 line so fixdep adds include/config/CC_VERSION_TEXT into the
16 auto-generated dependency. When the compiler is updated, syncconfig
17 will touch it and then every file will be rebuilt.
18
19config CC_IS_GCC
20 def_bool $(success,test "$(cc-name)" = GCC)
21
22config GCC_VERSION
23 int
24 default $(cc-version) if CC_IS_GCC
25 default 0
26
27config CC_IS_CLANG
28 def_bool $(success,test "$(cc-name)" = Clang)
29
30config CLANG_VERSION
31 int
32 default $(cc-version) if CC_IS_CLANG
33 default 0
34
35config AS_IS_GNU
36 def_bool $(success,test "$(as-name)" = GNU)
37
38config AS_IS_LLVM
39 def_bool $(success,test "$(as-name)" = LLVM)
40
41config AS_VERSION
42 int
43 # Use clang version if this is the integrated assembler
44 default CLANG_VERSION if AS_IS_LLVM
45 default $(as-version)
46
47config LD_IS_BFD
48 def_bool $(success,test "$(ld-name)" = BFD)
49
50config LD_VERSION
51 int
52 default $(ld-version) if LD_IS_BFD
53 default 0
54
55config LD_IS_LLD
56 def_bool $(success,test "$(ld-name)" = LLD)
57
58config LLD_VERSION
59 int
60 default $(ld-version) if LD_IS_LLD
61 default 0
62
63config RUSTC_VERSION
64 int
65 default $(rustc-version)
66 help
67 It does not depend on `RUST` since that one may need to use the version
68 in a `depends on`.
69
70config RUST_IS_AVAILABLE
71 def_bool $(success,$(srctree)/scripts/rust_is_available.sh)
72 help
73 This shows whether a suitable Rust toolchain is available (found).
74
75 Please see Documentation/rust/quick-start.rst for instructions on how
76 to satisfy the build requirements of Rust support.
77
78 In particular, the Makefile target 'rustavailable' is useful to check
79 why the Rust toolchain is not being detected.
80
81config RUSTC_LLVM_VERSION
82 int
83 default $(rustc-llvm-version)
84
85config CC_CAN_LINK
86 bool
87 default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m64-flag)) if 64BIT
88 default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(USERCFLAGS) $(USERLDFLAGS) $(m32-flag))
89
90# Fixed in GCC 14, 13.3, 12.4 and 11.5
91# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113921
92config GCC_ASM_GOTO_OUTPUT_BROKEN
93 bool
94 depends on CC_IS_GCC
95 default y if GCC_VERSION < 110500
96 default y if GCC_VERSION >= 120000 && GCC_VERSION < 120400
97 default y if GCC_VERSION >= 130000 && GCC_VERSION < 130300
98
99config CC_HAS_ASM_GOTO_OUTPUT
100 def_bool y
101 depends on !GCC_ASM_GOTO_OUTPUT_BROKEN
102 depends on $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null)
103
104config CC_HAS_ASM_GOTO_TIED_OUTPUT
105 depends on CC_HAS_ASM_GOTO_OUTPUT
106 # Detect buggy gcc and clang, fixed in gcc-11 clang-14.
107 def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null)
108
109config TOOLS_SUPPORT_RELR
110 def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh)
111
112config CC_HAS_ASM_INLINE
113 def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null)
114
115config CC_HAS_NO_PROFILE_FN_ATTR
116 def_bool $(success,echo '__attribute__((no_profile_instrument_function)) int x();' | $(CC) -x c - -c -o /dev/null -Werror)
117
118config CC_HAS_COUNTED_BY
119 bool
120 # clang needs to be at least 19.1.3 to avoid __bdos miscalculations
121 # https://github.com/llvm/llvm-project/pull/110497
122 # https://github.com/llvm/llvm-project/pull/112636
123 default y if CC_IS_CLANG && CLANG_VERSION >= 190103
124 # supported since gcc 15.1.0
125 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
126 default y if CC_IS_GCC && GCC_VERSION >= 150100
127
128config CC_HAS_MULTIDIMENSIONAL_NONSTRING
129 def_bool $(success,echo 'char tag[][4] __attribute__((__nonstring__)) = { };' | $(CC) $(CLANG_FLAGS) -x c - -c -o /dev/null -Werror)
130
131config LD_CAN_USE_KEEP_IN_OVERLAY
132 # ld.lld prior to 21.0.0 did not support KEEP within an overlay description
133 # https://github.com/llvm/llvm-project/pull/130661
134 def_bool LD_IS_BFD || LLD_VERSION >= 210000
135
136config RUSTC_HAS_COERCE_POINTEE
137 def_bool RUSTC_VERSION >= 108400
138
139config RUSTC_HAS_SPAN_FILE
140 def_bool RUSTC_VERSION >= 108800
141
142config RUSTC_HAS_UNNECESSARY_TRANSMUTES
143 def_bool RUSTC_VERSION >= 108800
144
145config PAHOLE_VERSION
146 int
147 default $(shell,$(srctree)/scripts/pahole-version.sh $(PAHOLE))
148
149config CONSTRUCTORS
150 bool
151
152config IRQ_WORK
153 def_bool y if SMP
154
155config BUILDTIME_TABLE_SORT
156 bool
157
158config THREAD_INFO_IN_TASK
159 bool
160 help
161 Select this to move thread_info off the stack into task_struct. To
162 make this work, an arch will need to remove all thread_info fields
163 except flags and fix any runtime bugs.
164
165 One subtle change that will be needed is to use try_get_task_stack()
166 and put_task_stack() in save_thread_stack_tsk() and get_wchan().
167
168menu "General setup"
169
170config BROKEN
171 bool
172
173config BROKEN_ON_SMP
174 bool
175 depends on BROKEN || !SMP
176 default y
177
178config INIT_ENV_ARG_LIMIT
179 int
180 default 32 if !UML
181 default 128 if UML
182 help
183 Maximum of each of the number of arguments and environment
184 variables passed to init from the kernel command line.
185
186config COMPILE_TEST
187 bool "Compile also drivers which will not load"
188 depends on HAS_IOMEM
189 help
190 Some drivers can be compiled on a different platform than they are
191 intended to be run on. Despite they cannot be loaded there (or even
192 when they load they cannot be used due to missing HW support),
193 developers still, opposing to distributors, might want to build such
194 drivers to compile-test them.
195
196 If you are a developer and want to build everything available, say Y
197 here. If you are a user/distributor, say N here to exclude useless
198 drivers to be distributed.
199
200config WERROR
201 bool "Compile the kernel with warnings as errors"
202 default COMPILE_TEST
203 help
204 A kernel build should not cause any compiler warnings, and this
205 enables the '-Werror' (for C) and '-Dwarnings' (for Rust) flags
206 to enforce that rule by default. Certain warnings from other tools
207 such as the linker may be upgraded to errors with this option as
208 well.
209
210 However, if you have a new (or very old) compiler or linker with odd
211 and unusual warnings, or you have some architecture with problems,
212 you may need to disable this config option in order to
213 successfully build the kernel.
214
215 If in doubt, say Y.
216
217config UAPI_HEADER_TEST
218 bool "Compile test UAPI headers"
219 depends on HEADERS_INSTALL && CC_CAN_LINK
220 help
221 Compile test headers exported to user-space to ensure they are
222 self-contained, i.e. compilable as standalone units.
223
224 If you are a developer or tester and want to ensure the exported
225 headers are self-contained, say Y here. Otherwise, choose N.
226
227config LOCALVERSION
228 string "Local version - append to kernel release"
229 help
230 Append an extra string to the end of your kernel version.
231 This will show up when you type uname, for example.
232 The string you set here will be appended after the contents of
233 any files with a filename matching localversion* in your
234 object and source tree, in that order. Your total string can
235 be a maximum of 64 characters.
236
237config LOCALVERSION_AUTO
238 bool "Automatically append version information to the version string"
239 default y
240 depends on !COMPILE_TEST
241 help
242 This will try to automatically determine if the current tree is a
243 release tree by looking for git tags that belong to the current
244 top of tree revision.
245
246 A string of the format -gxxxxxxxx will be added to the localversion
247 if a git-based tree is found. The string generated by this will be
248 appended after any matching localversion* files, and after the value
249 set in CONFIG_LOCALVERSION.
250
251 (The actual string used here is the first 12 characters produced
252 by running the command:
253
254 $ git rev-parse --verify HEAD
255
256 which is done within the script "scripts/setlocalversion".)
257
258config BUILD_SALT
259 string "Build ID Salt"
260 default ""
261 help
262 The build ID is used to link binaries and their debug info. Setting
263 this option will use the value in the calculation of the build id.
264 This is mostly useful for distributions which want to ensure the
265 build is unique between builds. It's safe to leave the default.
266
267config HAVE_KERNEL_GZIP
268 bool
269
270config HAVE_KERNEL_BZIP2
271 bool
272
273config HAVE_KERNEL_LZMA
274 bool
275
276config HAVE_KERNEL_XZ
277 bool
278
279config HAVE_KERNEL_LZO
280 bool
281
282config HAVE_KERNEL_LZ4
283 bool
284
285config HAVE_KERNEL_ZSTD
286 bool
287
288config HAVE_KERNEL_UNCOMPRESSED
289 bool
290
291choice
292 prompt "Kernel compression mode"
293 default KERNEL_GZIP
294 depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_ZSTD || HAVE_KERNEL_UNCOMPRESSED
295 help
296 The linux kernel is a kind of self-extracting executable.
297 Several compression algorithms are available, which differ
298 in efficiency, compression and decompression speed.
299 Compression speed is only relevant when building a kernel.
300 Decompression speed is relevant at each boot.
301
302 If you have any problems with bzip2 or lzma compressed
303 kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older
304 version of this functionality (bzip2 only), for 2.4, was
305 supplied by Christian Ludwig)
306
307 High compression options are mostly useful for users, who
308 are low on disk space (embedded systems), but for whom ram
309 size matters less.
310
311 If in doubt, select 'gzip'
312
313config KERNEL_GZIP
314 bool "Gzip"
315 depends on HAVE_KERNEL_GZIP
316 help
317 The old and tried gzip compression. It provides a good balance
318 between compression ratio and decompression speed.
319
320config KERNEL_BZIP2
321 bool "Bzip2"
322 depends on HAVE_KERNEL_BZIP2
323 help
324 Its compression ratio and speed is intermediate.
325 Decompression speed is slowest among the choices. The kernel
326 size is about 10% smaller with bzip2, in comparison to gzip.
327 Bzip2 uses a large amount of memory. For modern kernels you
328 will need at least 8MB RAM or more for booting.
329
330config KERNEL_LZMA
331 bool "LZMA"
332 depends on HAVE_KERNEL_LZMA
333 help
334 This compression algorithm's ratio is best. Decompression speed
335 is between gzip and bzip2. Compression is slowest.
336 The kernel size is about 33% smaller with LZMA in comparison to gzip.
337
338config KERNEL_XZ
339 bool "XZ"
340 depends on HAVE_KERNEL_XZ
341 help
342 XZ uses the LZMA2 algorithm and instruction set specific
343 BCJ filters which can improve compression ratio of executable
344 code. The size of the kernel is about 30% smaller with XZ in
345 comparison to gzip. On architectures for which there is a BCJ
346 filter (i386, x86_64, ARM, ARM64, RISC-V, big endian PowerPC,
347 and SPARC), XZ will create a few percent smaller kernel than
348 plain LZMA.
349
350 The speed is about the same as with LZMA: The decompression
351 speed of XZ is better than that of bzip2 but worse than gzip
352 and LZO. Compression is slow.
353
354config KERNEL_LZO
355 bool "LZO"
356 depends on HAVE_KERNEL_LZO
357 help
358 Its compression ratio is the poorest among the choices. The kernel
359 size is about 10% bigger than gzip; however its speed
360 (both compression and decompression) is the fastest.
361
362config KERNEL_LZ4
363 bool "LZ4"
364 depends on HAVE_KERNEL_LZ4
365 help
366 LZ4 is an LZ77-type compressor with a fixed, byte-oriented encoding.
367 A preliminary version of LZ4 de/compression tool is available at
368 <https://code.google.com/p/lz4/>.
369
370 Its compression ratio is worse than LZO. The size of the kernel
371 is about 8% bigger than LZO. But the decompression speed is
372 faster than LZO.
373
374config KERNEL_ZSTD
375 bool "ZSTD"
376 depends on HAVE_KERNEL_ZSTD
377 help
378 ZSTD is a compression algorithm targeting intermediate compression
379 with fast decompression speed. It will compress better than GZIP and
380 decompress around the same speed as LZO, but slower than LZ4. You
381 will need at least 192 KB RAM or more for booting. The zstd command
382 line tool is required for compression.
383
384config KERNEL_UNCOMPRESSED
385 bool "None"
386 depends on HAVE_KERNEL_UNCOMPRESSED
387 help
388 Produce uncompressed kernel image. This option is usually not what
389 you want. It is useful for debugging the kernel in slow simulation
390 environments, where decompressing and moving the kernel is awfully
391 slow. This option allows early boot code to skip the decompressor
392 and jump right at uncompressed kernel image.
393
394endchoice
395
396config DEFAULT_INIT
397 string "Default init path"
398 default ""
399 help
400 This option determines the default init for the system if no init=
401 option is passed on the kernel command line. If the requested path is
402 not present, we will still then move on to attempting further
403 locations (e.g. /sbin/init, etc). If this is empty, we will just use
404 the fallback list when init= is not passed.
405
406config DEFAULT_HOSTNAME
407 string "Default hostname"
408 default "(none)"
409 help
410 This option determines the default system hostname before userspace
411 calls sethostname(2). The kernel traditionally uses "(none)" here,
412 but you may wish to use a different default here to make a minimal
413 system more usable with less configuration.
414
415config SYSVIPC
416 bool "System V IPC"
417 help
418 Inter Process Communication is a suite of library functions and
419 system calls which let processes (running programs) synchronize and
420 exchange information. It is generally considered to be a good thing,
421 and some programs won't run unless you say Y here. In particular, if
422 you want to run the DOS emulator dosemu under Linux (read the
423 DOSEMU-HOWTO, available from <http://www.tldp.org/docs.html#howto>),
424 you'll need to say Y here.
425
426 You can find documentation about IPC with "info ipc" and also in
427 section 6.4 of the Linux Programmer's Guide, available from
428 <http://www.tldp.org/guides.html>.
429
430config SYSVIPC_SYSCTL
431 bool
432 depends on SYSVIPC
433 depends on SYSCTL
434 default y
435
436config SYSVIPC_COMPAT
437 def_bool y
438 depends on COMPAT && SYSVIPC
439
440config POSIX_MQUEUE
441 bool "POSIX Message Queues"
442 depends on NET
443 help
444 POSIX variant of message queues is a part of IPC. In POSIX message
445 queues every message has a priority which decides about succession
446 of receiving it by a process. If you want to compile and run
447 programs written e.g. for Solaris with use of its POSIX message
448 queues (functions mq_*) say Y here.
449
450 POSIX message queues are visible as a filesystem called 'mqueue'
451 and can be mounted somewhere if you want to do filesystem
452 operations on message queues.
453
454 If unsure, say Y.
455
456config POSIX_MQUEUE_SYSCTL
457 bool
458 depends on POSIX_MQUEUE
459 depends on SYSCTL
460 default y
461
462config WATCH_QUEUE
463 bool "General notification queue"
464 default n
465 help
466
467 This is a general notification queue for the kernel to pass events to
468 userspace by splicing them into pipes. It can be used in conjunction
469 with watches for key/keyring change notifications and device
470 notifications.
471
472 See Documentation/core-api/watch_queue.rst
473
474config CROSS_MEMORY_ATTACH
475 bool "Enable process_vm_readv/writev syscalls"
476 depends on MMU
477 default y
478 help
479 Enabling this option adds the system calls process_vm_readv and
480 process_vm_writev which allow a process with the correct privileges
481 to directly read from or write to another process' address space.
482 See the man page for more details.
483
484config AUDIT
485 bool "Auditing support"
486 depends on NET
487 help
488 Enable auditing infrastructure that can be used with another
489 kernel subsystem, such as SELinux (which requires this for
490 logging of avc messages output). System call auditing is included
491 on architectures which support it.
492
493config HAVE_ARCH_AUDITSYSCALL
494 bool
495
496config AUDITSYSCALL
497 def_bool y
498 depends on AUDIT && HAVE_ARCH_AUDITSYSCALL
499 select FSNOTIFY
500
501source "kernel/irq/Kconfig"
502source "kernel/time/Kconfig"
503source "kernel/bpf/Kconfig"
504source "kernel/Kconfig.preempt"
505
506menu "CPU/Task time and stats accounting"
507
508config VIRT_CPU_ACCOUNTING
509 bool
510
511choice
512 prompt "Cputime accounting"
513 default TICK_CPU_ACCOUNTING
514
515# Kind of a stub config for the pure tick based cputime accounting
516config TICK_CPU_ACCOUNTING
517 bool "Simple tick based cputime accounting"
518 depends on !S390 && !NO_HZ_FULL
519 help
520 This is the basic tick based cputime accounting that maintains
521 statistics about user, system and idle time spent on per jiffies
522 granularity.
523
524 If unsure, say Y.
525
526config VIRT_CPU_ACCOUNTING_NATIVE
527 bool "Deterministic task and CPU time accounting"
528 depends on HAVE_VIRT_CPU_ACCOUNTING && !NO_HZ_FULL
529 select VIRT_CPU_ACCOUNTING
530 help
531 Select this option to enable more accurate task and CPU time
532 accounting. This is done by reading a CPU counter on each
533 kernel entry and exit and on transitions within the kernel
534 between system, softirq and hardirq state, so there is a
535 small performance impact. In the case of s390 or IBM POWER > 5,
536 this also enables accounting of stolen time on logically-partitioned
537 systems.
538
539config VIRT_CPU_ACCOUNTING_GEN
540 bool "Full dynticks CPU time accounting"
541 depends on HAVE_CONTEXT_TRACKING_USER
542 depends on HAVE_VIRT_CPU_ACCOUNTING_GEN
543 depends on GENERIC_CLOCKEVENTS
544 select VIRT_CPU_ACCOUNTING
545 select CONTEXT_TRACKING_USER
546 help
547 Select this option to enable task and CPU time accounting on full
548 dynticks systems. This accounting is implemented by watching every
549 kernel-user boundaries using the context tracking subsystem.
550 The accounting is thus performed at the expense of some significant
551 overhead.
552
553 For now this is only useful if you are working on the full
554 dynticks subsystem development.
555
556 If unsure, say N.
557
558endchoice
559
560config IRQ_TIME_ACCOUNTING
561 bool "Fine granularity task level IRQ time accounting"
562 depends on HAVE_IRQ_TIME_ACCOUNTING && !VIRT_CPU_ACCOUNTING_NATIVE
563 help
564 Select this option to enable fine granularity task irq time
565 accounting. This is done by reading a timestamp on each
566 transitions between softirq and hardirq state, so there can be a
567 small performance impact.
568
569 If in doubt, say N here.
570
571config HAVE_SCHED_AVG_IRQ
572 def_bool y
573 depends on IRQ_TIME_ACCOUNTING || PARAVIRT_TIME_ACCOUNTING
574 depends on SMP
575
576config SCHED_HW_PRESSURE
577 bool
578 default y if ARM && ARM_CPU_TOPOLOGY
579 default y if ARM64
580 depends on SMP
581 depends on CPU_FREQ_THERMAL
582 help
583 Select this option to enable HW pressure accounting in the
584 scheduler. HW pressure is the value conveyed to the scheduler
585 that reflects the reduction in CPU compute capacity resulted from
586 HW throttling. HW throttling occurs when the performance of
587 a CPU is capped due to high operating temperatures as an example.
588
589 If selected, the scheduler will be able to balance tasks accordingly,
590 i.e. put less load on throttled CPUs than on non/less throttled ones.
591
592 This requires the architecture to implement
593 arch_update_hw_pressure() and arch_scale_thermal_pressure().
594
595config BSD_PROCESS_ACCT
596 bool "BSD Process Accounting"
597 depends on MULTIUSER
598 help
599 If you say Y here, a user level program will be able to instruct the
600 kernel (via a special system call) to write process accounting
601 information to a file: whenever a process exits, information about
602 that process will be appended to the file by the kernel. The
603 information includes things such as creation time, owning user,
604 command name, memory usage, controlling terminal etc. (the complete
605 list is in the struct acct in <file:include/linux/acct.h>). It is
606 up to the user level program to do useful things with this
607 information. This is generally a good idea, so say Y.
608
609config BSD_PROCESS_ACCT_V3
610 bool "BSD Process Accounting version 3 file format"
611 depends on BSD_PROCESS_ACCT
612 default n
613 help
614 If you say Y here, the process accounting information is written
615 in a new file format that also logs the process IDs of each
616 process and its parent. Note that this file format is incompatible
617 with previous v0/v1/v2 file formats, so you will need updated tools
618 for processing it. A preliminary version of these tools is available
619 at <http://www.gnu.org/software/acct/>.
620
621config TASKSTATS
622 bool "Export task/process statistics through netlink"
623 depends on NET
624 depends on MULTIUSER
625 default n
626 help
627 Export selected statistics for tasks/processes through the
628 generic netlink interface. Unlike BSD process accounting, the
629 statistics are available during the lifetime of tasks/processes as
630 responses to commands. Like BSD accounting, they are sent to user
631 space on task exit.
632
633 Say N if unsure.
634
635config TASK_DELAY_ACCT
636 bool "Enable per-task delay accounting"
637 depends on TASKSTATS
638 select SCHED_INFO
639 help
640 Collect information on time spent by a task waiting for system
641 resources like cpu, synchronous block I/O completion and swapping
642 in pages. Such statistics can help in setting a task's priorities
643 relative to other tasks for cpu, io, rss limits etc.
644
645 Say N if unsure.
646
647config TASK_XACCT
648 bool "Enable extended accounting over taskstats"
649 depends on TASKSTATS
650 help
651 Collect extended task accounting data and send the data
652 to userland for processing over the taskstats interface.
653
654 Say N if unsure.
655
656config TASK_IO_ACCOUNTING
657 bool "Enable per-task storage I/O accounting"
658 depends on TASK_XACCT
659 help
660 Collect information on the number of bytes of storage I/O which this
661 task has caused.
662
663 Say N if unsure.
664
665config PSI
666 bool "Pressure stall information tracking"
667 select KERNFS
668 help
669 Collect metrics that indicate how overcommitted the CPU, memory,
670 and IO capacity are in the system.
671
672 If you say Y here, the kernel will create /proc/pressure/ with the
673 pressure statistics files cpu, memory, and io. These will indicate
674 the share of walltime in which some or all tasks in the system are
675 delayed due to contention of the respective resource.
676
677 In kernels with cgroup support, cgroups (cgroup2 only) will
678 have cpu.pressure, memory.pressure, and io.pressure files,
679 which aggregate pressure stalls for the grouped tasks only.
680
681 For more details see Documentation/accounting/psi.rst.
682
683 Say N if unsure.
684
685config PSI_DEFAULT_DISABLED
686 bool "Require boot parameter to enable pressure stall information tracking"
687 default n
688 depends on PSI
689 help
690 If set, pressure stall information tracking will be disabled
691 per default but can be enabled through passing psi=1 on the
692 kernel commandline during boot.
693
694 This feature adds some code to the task wakeup and sleep
695 paths of the scheduler. The overhead is too low to affect
696 common scheduling-intense workloads in practice (such as
697 webservers, memcache), but it does show up in artificial
698 scheduler stress tests, such as hackbench.
699
700 If you are paranoid and not sure what the kernel will be
701 used for, say Y.
702
703 Say N if unsure.
704
705endmenu # "CPU/Task time and stats accounting"
706
707config CPU_ISOLATION
708 bool "CPU isolation"
709 depends on SMP
710 default y
711 help
712 Make sure that CPUs running critical tasks are not disturbed by
713 any source of "noise" such as unbound workqueues, timers, kthreads...
714 Unbound jobs get offloaded to housekeeping CPUs. This is driven by
715 the "isolcpus=" boot parameter.
716
717 Say Y if unsure.
718
719source "kernel/rcu/Kconfig"
720
721config IKCONFIG
722 tristate "Kernel .config support"
723 help
724 This option enables the complete Linux kernel ".config" file
725 contents to be saved in the kernel. It provides documentation
726 of which kernel options are used in a running kernel or in an
727 on-disk kernel. This information can be extracted from the kernel
728 image file with the script scripts/extract-ikconfig and used as
729 input to rebuild the current kernel or to build another kernel.
730 It can also be extracted from a running kernel by reading
731 /proc/config.gz if enabled (below).
732
733config IKCONFIG_PROC
734 bool "Enable access to .config through /proc/config.gz"
735 depends on IKCONFIG && PROC_FS
736 help
737 This option enables access to the kernel configuration file
738 through /proc/config.gz.
739
740config IKHEADERS
741 tristate "Enable kernel headers through /sys/kernel/kheaders.tar.xz"
742 depends on SYSFS
743 help
744 This option enables access to the in-kernel headers that are generated during
745 the build process. These can be used to build eBPF tracing programs,
746 or similar programs. If you build the headers as a module, a module called
747 kheaders.ko is built which can be loaded on-demand to get access to headers.
748
749config LOG_BUF_SHIFT
750 int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
751 range 12 25
752 default 17
753 depends on PRINTK
754 help
755 Select the minimal kernel log buffer size as a power of 2.
756 The final size is affected by LOG_CPU_MAX_BUF_SHIFT config
757 parameter, see below. Any higher size also might be forced
758 by "log_buf_len" boot parameter.
759
760 Examples:
761 17 => 128 KB
762 16 => 64 KB
763 15 => 32 KB
764 14 => 16 KB
765 13 => 8 KB
766 12 => 4 KB
767
768config LOG_CPU_MAX_BUF_SHIFT
769 int "CPU kernel log buffer size contribution (13 => 8 KB, 17 => 128KB)"
770 depends on SMP
771 range 0 21
772 default 0 if BASE_SMALL
773 default 12
774 depends on PRINTK
775 help
776 This option allows to increase the default ring buffer size
777 according to the number of CPUs. The value defines the contribution
778 of each CPU as a power of 2. The used space is typically only few
779 lines however it might be much more when problems are reported,
780 e.g. backtraces.
781
782 The increased size means that a new buffer has to be allocated and
783 the original static one is unused. It makes sense only on systems
784 with more CPUs. Therefore this value is used only when the sum of
785 contributions is greater than the half of the default kernel ring
786 buffer as defined by LOG_BUF_SHIFT. The default values are set
787 so that more than 16 CPUs are needed to trigger the allocation.
788
789 Also this option is ignored when "log_buf_len" kernel parameter is
790 used as it forces an exact (power of two) size of the ring buffer.
791
792 The number of possible CPUs is used for this computation ignoring
793 hotplugging making the computation optimal for the worst case
794 scenario while allowing a simple algorithm to be used from bootup.
795
796 Examples shift values and their meaning:
797 17 => 128 KB for each CPU
798 16 => 64 KB for each CPU
799 15 => 32 KB for each CPU
800 14 => 16 KB for each CPU
801 13 => 8 KB for each CPU
802 12 => 4 KB for each CPU
803
804config PRINTK_INDEX
805 bool "Printk indexing debugfs interface"
806 depends on PRINTK && DEBUG_FS
807 help
808 Add support for indexing of all printk formats known at compile time
809 at <debugfs>/printk/index/<module>.
810
811 This can be used as part of maintaining daemons which monitor
812 /dev/kmsg, as it permits auditing the printk formats present in a
813 kernel, allowing detection of cases where monitored printks are
814 changed or no longer present.
815
816 There is no additional runtime cost to printk with this enabled.
817
818#
819# Architectures with an unreliable sched_clock() should select this:
820#
821config HAVE_UNSTABLE_SCHED_CLOCK
822 bool
823
824config GENERIC_SCHED_CLOCK
825 bool
826
827menu "Scheduler features"
828
829config UCLAMP_TASK
830 bool "Enable utilization clamping for RT/FAIR tasks"
831 depends on CPU_FREQ_GOV_SCHEDUTIL
832 help
833 This feature enables the scheduler to track the clamped utilization
834 of each CPU based on RUNNABLE tasks scheduled on that CPU.
835
836 With this option, the user can specify the min and max CPU
837 utilization allowed for RUNNABLE tasks. The max utilization defines
838 the maximum frequency a task should use while the min utilization
839 defines the minimum frequency it should use.
840
841 Both min and max utilization clamp values are hints to the scheduler,
842 aiming at improving its frequency selection policy, but they do not
843 enforce or grant any specific bandwidth for tasks.
844
845 If in doubt, say N.
846
847config UCLAMP_BUCKETS_COUNT
848 int "Number of supported utilization clamp buckets"
849 range 5 20
850 default 5
851 depends on UCLAMP_TASK
852 help
853 Defines the number of clamp buckets to use. The range of each bucket
854 will be SCHED_CAPACITY_SCALE/UCLAMP_BUCKETS_COUNT. The higher the
855 number of clamp buckets the finer their granularity and the higher
856 the precision of clamping aggregation and tracking at run-time.
857
858 For example, with the minimum configuration value we will have 5
859 clamp buckets tracking 20% utilization each. A 25% boosted tasks will
860 be refcounted in the [20..39]% bucket and will set the bucket clamp
861 effective value to 25%.
862 If a second 30% boosted task should be co-scheduled on the same CPU,
863 that task will be refcounted in the same bucket of the first task and
864 it will boost the bucket clamp effective value to 30%.
865 The clamp effective value of a bucket is reset to its nominal value
866 (20% in the example above) when there are no more tasks refcounted in
867 that bucket.
868
869 An additional boost/capping margin can be added to some tasks. In the
870 example above the 25% task will be boosted to 30% until it exits the
871 CPU. If that should be considered not acceptable on certain systems,
872 it's always possible to reduce the margin by increasing the number of
873 clamp buckets to trade off used memory for run-time tracking
874 precision.
875
876 If in doubt, use the default value.
877
878endmenu
879
880#
881# For architectures that want to enable the support for NUMA-affine scheduler
882# balancing logic:
883#
884config ARCH_SUPPORTS_NUMA_BALANCING
885 bool
886
887#
888# For architectures that prefer to flush all TLBs after a number of pages
889# are unmapped instead of sending one IPI per page to flush. The architecture
890# must provide guarantees on what happens if a clean TLB cache entry is
891# written after the unmap. Details are in mm/rmap.c near the check for
892# should_defer_flush. The architecture should also consider if the full flush
893# and the refill costs are offset by the savings of sending fewer IPIs.
894config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
895 bool
896
897config CC_HAS_INT128
898 def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
899
900config CC_IMPLICIT_FALLTHROUGH
901 string
902 default "-Wimplicit-fallthrough=5" if CC_IS_GCC && $(cc-option,-Wimplicit-fallthrough=5)
903 default "-Wimplicit-fallthrough" if CC_IS_CLANG && $(cc-option,-Wunreachable-code-fallthrough)
904
905# Currently, disable gcc-10+ array-bounds globally.
906# It's still broken in gcc-13, so no upper bound yet.
907config GCC10_NO_ARRAY_BOUNDS
908 def_bool y
909
910config CC_NO_ARRAY_BOUNDS
911 bool
912 default y if CC_IS_GCC && GCC_VERSION >= 90000 && GCC10_NO_ARRAY_BOUNDS
913
914# Currently, disable -Wstringop-overflow for GCC globally.
915config GCC_NO_STRINGOP_OVERFLOW
916 def_bool y
917
918config CC_NO_STRINGOP_OVERFLOW
919 bool
920 default y if CC_IS_GCC && GCC_NO_STRINGOP_OVERFLOW
921
922config CC_STRINGOP_OVERFLOW
923 bool
924 default y if CC_IS_GCC && !CC_NO_STRINGOP_OVERFLOW
925
926#
927# For architectures that know their GCC __int128 support is sound
928#
929config ARCH_SUPPORTS_INT128
930 bool
931
932# For architectures that (ab)use NUMA to represent different memory regions
933# all cpu-local but of different latencies, such as SuperH.
934#
935config ARCH_WANT_NUMA_VARIABLE_LOCALITY
936 bool
937
938config NUMA_BALANCING
939 bool "Memory placement aware NUMA scheduler"
940 depends on ARCH_SUPPORTS_NUMA_BALANCING
941 depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY
942 depends on SMP && NUMA && MIGRATION && !PREEMPT_RT
943 help
944 This option adds support for automatic NUMA aware memory/task placement.
945 The mechanism is quite primitive and is based on migrating memory when
946 it has references to the node the task is running on.
947
948 This system will be inactive on UMA systems.
949
950config NUMA_BALANCING_DEFAULT_ENABLED
951 bool "Automatically enable NUMA aware memory/task placement"
952 default y
953 depends on NUMA_BALANCING
954 help
955 If set, automatic NUMA balancing will be enabled if running on a NUMA
956 machine.
957
958config SLAB_OBJ_EXT
959 bool
960
961menuconfig CGROUPS
962 bool "Control Group support"
963 select KERNFS
964 help
965 This option adds support for grouping sets of processes together, for
966 use with process control subsystems such as Cpusets, CFS, memory
967 controls or device isolation.
968 See
969 - Documentation/scheduler/sched-design-CFS.rst (CFS)
970 - Documentation/admin-guide/cgroup-v1/ (features for grouping, isolation
971 and resource control)
972
973 Say N if unsure.
974
975if CGROUPS
976
977config PAGE_COUNTER
978 bool
979
980config CGROUP_FAVOR_DYNMODS
981 bool "Favor dynamic modification latency reduction by default"
982 help
983 This option enables the "favordynmods" mount option by default
984 which reduces the latencies of dynamic cgroup modifications such
985 as task migrations and controller on/offs at the cost of making
986 hot path operations such as forks and exits more expensive.
987
988 Say N if unsure.
989
990config MEMCG
991 bool "Memory controller"
992 select PAGE_COUNTER
993 select EVENTFD
994 select SLAB_OBJ_EXT
995 help
996 Provides control over the memory footprint of tasks in a cgroup.
997
998config MEMCG_NMI_UNSAFE
999 bool
1000 depends on MEMCG
1001 depends on HAVE_NMI
1002 depends on !ARCH_HAS_NMI_SAFE_THIS_CPU_OPS && !ARCH_HAVE_NMI_SAFE_CMPXCHG
1003 default y
1004
1005config MEMCG_NMI_SAFETY_REQUIRES_ATOMIC
1006 bool
1007 depends on MEMCG
1008 depends on HAVE_NMI
1009 depends on !ARCH_HAS_NMI_SAFE_THIS_CPU_OPS && ARCH_HAVE_NMI_SAFE_CMPXCHG
1010 default y
1011
1012config MEMCG_V1
1013 bool "Legacy cgroup v1 memory controller"
1014 depends on MEMCG
1015 default n
1016 help
1017 Legacy cgroup v1 memory controller which has been deprecated by
1018 cgroup v2 implementation. The v1 is there for legacy applications
1019 which haven't migrated to the new cgroup v2 interface yet. If you
1020 do not have any such application then you are completely fine leaving
1021 this option disabled.
1022
1023 Please note that feature set of the legacy memory controller is likely
1024 going to shrink due to deprecation process. New deployments with v1
1025 controller are highly discouraged.
1026
1027 Say N if unsure.
1028
1029config BLK_CGROUP
1030 bool "IO controller"
1031 depends on BLOCK
1032 default n
1033 help
1034 Generic block IO controller cgroup interface. This is the common
1035 cgroup interface which should be used by various IO controlling
1036 policies.
1037
1038 Currently, CFQ IO scheduler uses it to recognize task groups and
1039 control disk bandwidth allocation (proportional time slice allocation)
1040 to such task groups. It is also used by bio throttling logic in
1041 block layer to implement upper limit in IO rates on a device.
1042
1043 This option only enables generic Block IO controller infrastructure.
1044 One needs to also enable actual IO controlling logic/policy. For
1045 enabling proportional weight division of disk bandwidth in CFQ, set
1046 CONFIG_BFQ_GROUP_IOSCHED=y; for enabling throttling policy, set
1047 CONFIG_BLK_DEV_THROTTLING=y.
1048
1049 See Documentation/admin-guide/cgroup-v1/blkio-controller.rst for more information.
1050
1051config CGROUP_WRITEBACK
1052 bool
1053 depends on MEMCG && BLK_CGROUP
1054 default y
1055
1056menuconfig CGROUP_SCHED
1057 bool "CPU controller"
1058 default n
1059 help
1060 This feature lets CPU scheduler recognize task groups and control CPU
1061 bandwidth allocation to such task groups. It uses cgroups to group
1062 tasks.
1063
1064if CGROUP_SCHED
1065config GROUP_SCHED_WEIGHT
1066 def_bool n
1067
1068config FAIR_GROUP_SCHED
1069 bool "Group scheduling for SCHED_OTHER"
1070 depends on CGROUP_SCHED
1071 select GROUP_SCHED_WEIGHT
1072 default CGROUP_SCHED
1073
1074config CFS_BANDWIDTH
1075 bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED"
1076 depends on FAIR_GROUP_SCHED
1077 default n
1078 help
1079 This option allows users to define CPU bandwidth rates (limits) for
1080 tasks running within the fair group scheduler. Groups with no limit
1081 set are considered to be unconstrained and will run with no
1082 restriction.
1083 See Documentation/scheduler/sched-bwc.rst for more information.
1084
1085config RT_GROUP_SCHED
1086 bool "Group scheduling for SCHED_RR/FIFO"
1087 depends on CGROUP_SCHED
1088 default n
1089 help
1090 This feature lets you explicitly allocate real CPU bandwidth
1091 to task groups. If enabled, it will also make it impossible to
1092 schedule realtime tasks for non-root users until you allocate
1093 realtime bandwidth for them.
1094 See Documentation/scheduler/sched-rt-group.rst for more information.
1095
1096config RT_GROUP_SCHED_DEFAULT_DISABLED
1097 bool "Require boot parameter to enable group scheduling for SCHED_RR/FIFO"
1098 depends on RT_GROUP_SCHED
1099 default n
1100 help
1101 When set, the RT group scheduling is disabled by default. The option
1102 is in inverted form so that mere RT_GROUP_SCHED enables the group
1103 scheduling.
1104
1105 Say N if unsure.
1106
1107config EXT_GROUP_SCHED
1108 bool
1109 depends on SCHED_CLASS_EXT && CGROUP_SCHED
1110 select GROUP_SCHED_WEIGHT
1111 default y
1112
1113endif #CGROUP_SCHED
1114
1115config SCHED_MM_CID
1116 def_bool y
1117 depends on SMP && RSEQ
1118
1119config UCLAMP_TASK_GROUP
1120 bool "Utilization clamping per group of tasks"
1121 depends on CGROUP_SCHED
1122 depends on UCLAMP_TASK
1123 default n
1124 help
1125 This feature enables the scheduler to track the clamped utilization
1126 of each CPU based on RUNNABLE tasks currently scheduled on that CPU.
1127
1128 When this option is enabled, the user can specify a min and max
1129 CPU bandwidth which is allowed for each single task in a group.
1130 The max bandwidth allows to clamp the maximum frequency a task
1131 can use, while the min bandwidth allows to define a minimum
1132 frequency a task will always use.
1133
1134 When task group based utilization clamping is enabled, an eventually
1135 specified task-specific clamp value is constrained by the cgroup
1136 specified clamp value. Both minimum and maximum task clamping cannot
1137 be bigger than the corresponding clamping defined at task group level.
1138
1139 If in doubt, say N.
1140
1141config CGROUP_PIDS
1142 bool "PIDs controller"
1143 help
1144 Provides enforcement of process number limits in the scope of a
1145 cgroup. Any attempt to fork more processes than is allowed in the
1146 cgroup will fail. PIDs are fundamentally a global resource because it
1147 is fairly trivial to reach PID exhaustion before you reach even a
1148 conservative kmemcg limit. As a result, it is possible to grind a
1149 system to halt without being limited by other cgroup policies. The
1150 PIDs controller is designed to stop this from happening.
1151
1152 It should be noted that organisational operations (such as attaching
1153 to a cgroup hierarchy) will *not* be blocked by the PIDs controller,
1154 since the PIDs limit only affects a process's ability to fork, not to
1155 attach to a cgroup.
1156
1157config CGROUP_RDMA
1158 bool "RDMA controller"
1159 help
1160 Provides enforcement of RDMA resources defined by IB stack.
1161 It is fairly easy for consumers to exhaust RDMA resources, which
1162 can result into resource unavailability to other consumers.
1163 RDMA controller is designed to stop this from happening.
1164 Attaching processes with active RDMA resources to the cgroup
1165 hierarchy is allowed even if can cross the hierarchy's limit.
1166
1167config CGROUP_DMEM
1168 bool "Device memory controller (DMEM)"
1169 select PAGE_COUNTER
1170 help
1171 The DMEM controller allows compatible devices to restrict device
1172 memory usage based on the cgroup hierarchy.
1173
1174 As an example, it allows you to restrict VRAM usage for applications
1175 in the DRM subsystem.
1176
1177config CGROUP_FREEZER
1178 bool "Freezer controller"
1179 help
1180 Provides a way to freeze and unfreeze all tasks in a
1181 cgroup.
1182
1183 This option affects the ORIGINAL cgroup interface. The cgroup2 memory
1184 controller includes important in-kernel memory consumers per default.
1185
1186 If you're using cgroup2, say N.
1187
1188config CGROUP_HUGETLB
1189 bool "HugeTLB controller"
1190 depends on HUGETLB_PAGE
1191 select PAGE_COUNTER
1192 default n
1193 help
1194 Provides a cgroup controller for HugeTLB pages.
1195 When you enable this, you can put a per cgroup limit on HugeTLB usage.
1196 The limit is enforced during page fault. Since HugeTLB doesn't
1197 support page reclaim, enforcing the limit at page fault time implies
1198 that, the application will get SIGBUS signal if it tries to access
1199 HugeTLB pages beyond its limit. This requires the application to know
1200 beforehand how much HugeTLB pages it would require for its use. The
1201 control group is tracked in the third page lru pointer. This means
1202 that we cannot use the controller with huge page less than 3 pages.
1203
1204config CPUSETS
1205 bool "Cpuset controller"
1206 depends on SMP
1207 select UNION_FIND
1208 help
1209 This option will let you create and manage CPUSETs which
1210 allow dynamically partitioning a system into sets of CPUs and
1211 Memory Nodes and assigning tasks to run only within those sets.
1212 This is primarily useful on large SMP or NUMA systems.
1213
1214 Say N if unsure.
1215
1216config CPUSETS_V1
1217 bool "Legacy cgroup v1 cpusets controller"
1218 depends on CPUSETS
1219 default n
1220 help
1221 Legacy cgroup v1 cpusets controller which has been deprecated by
1222 cgroup v2 implementation. The v1 is there for legacy applications
1223 which haven't migrated to the new cgroup v2 interface yet. Legacy
1224 interface includes cpuset filesystem and /proc/<pid>/cpuset. If you
1225 do not have any such application then you are completely fine leaving
1226 this option disabled.
1227
1228 Say N if unsure.
1229
1230config PROC_PID_CPUSET
1231 bool "Include legacy /proc/<pid>/cpuset file"
1232 depends on CPUSETS_V1
1233 default y
1234
1235config CGROUP_DEVICE
1236 bool "Device controller"
1237 help
1238 Provides a cgroup controller implementing whitelists for
1239 devices which a process in the cgroup can mknod or open.
1240
1241config CGROUP_CPUACCT
1242 bool "Simple CPU accounting controller"
1243 help
1244 Provides a simple controller for monitoring the
1245 total CPU consumed by the tasks in a cgroup.
1246
1247config CGROUP_PERF
1248 bool "Perf controller"
1249 depends on PERF_EVENTS
1250 help
1251 This option extends the perf per-cpu mode to restrict monitoring
1252 to threads which belong to the cgroup specified and run on the
1253 designated cpu. Or this can be used to have cgroup ID in samples
1254 so that it can monitor performance events among cgroups.
1255
1256 Say N if unsure.
1257
1258config CGROUP_BPF
1259 bool "Support for eBPF programs attached to cgroups"
1260 depends on BPF_SYSCALL
1261 select SOCK_CGROUP_DATA
1262 help
1263 Allow attaching eBPF programs to a cgroup using the bpf(2)
1264 syscall command BPF_PROG_ATTACH.
1265
1266 In which context these programs are accessed depends on the type
1267 of attachment. For instance, programs that are attached using
1268 BPF_CGROUP_INET_INGRESS will be executed on the ingress path of
1269 inet sockets.
1270
1271config CGROUP_MISC
1272 bool "Misc resource controller"
1273 default n
1274 help
1275 Provides a controller for miscellaneous resources on a host.
1276
1277 Miscellaneous scalar resources are the resources on the host system
1278 which cannot be abstracted like the other cgroups. This controller
1279 tracks and limits the miscellaneous resources used by a process
1280 attached to a cgroup hierarchy.
1281
1282 For more information, please check misc cgroup section in
1283 /Documentation/admin-guide/cgroup-v2.rst.
1284
1285config CGROUP_DEBUG
1286 bool "Debug controller"
1287 default n
1288 depends on DEBUG_KERNEL
1289 help
1290 This option enables a simple controller that exports
1291 debugging information about the cgroups framework. This
1292 controller is for control cgroup debugging only. Its
1293 interfaces are not stable.
1294
1295 Say N.
1296
1297config SOCK_CGROUP_DATA
1298 bool
1299 default n
1300
1301endif # CGROUPS
1302
1303menuconfig NAMESPACES
1304 bool "Namespaces support" if EXPERT
1305 depends on MULTIUSER
1306 default !EXPERT
1307 help
1308 Provides the way to make tasks work with different objects using
1309 the same id. For example same IPC id may refer to different objects
1310 or same user id or pid may refer to different tasks when used in
1311 different namespaces.
1312
1313if NAMESPACES
1314
1315config UTS_NS
1316 bool "UTS namespace"
1317 default y
1318 help
1319 In this namespace tasks see different info provided with the
1320 uname() system call
1321
1322config TIME_NS
1323 bool "TIME namespace"
1324 depends on GENERIC_VDSO_TIME_NS
1325 default y
1326 help
1327 In this namespace boottime and monotonic clocks can be set.
1328 The time will keep going with the same pace.
1329
1330config IPC_NS
1331 bool "IPC namespace"
1332 depends on (SYSVIPC || POSIX_MQUEUE)
1333 default y
1334 help
1335 In this namespace tasks work with IPC ids which correspond to
1336 different IPC objects in different namespaces.
1337
1338config USER_NS
1339 bool "User namespace"
1340 default n
1341 help
1342 This allows containers, i.e. vservers, to use user namespaces
1343 to provide different user info for different servers.
1344
1345 When user namespaces are enabled in the kernel it is
1346 recommended that the MEMCG option also be enabled and that
1347 user-space use the memory control groups to limit the amount
1348 of memory a memory unprivileged users can use.
1349
1350 If unsure, say N.
1351
1352config PID_NS
1353 bool "PID Namespaces"
1354 default y
1355 help
1356 Support process id namespaces. This allows having multiple
1357 processes with the same pid as long as they are in different
1358 pid namespaces. This is a building block of containers.
1359
1360config NET_NS
1361 bool "Network namespace"
1362 depends on NET
1363 default y
1364 help
1365 Allow user space to create what appear to be multiple instances
1366 of the network stack.
1367
1368endif # NAMESPACES
1369
1370config CHECKPOINT_RESTORE
1371 bool "Checkpoint/restore support"
1372 depends on PROC_FS
1373 select PROC_CHILDREN
1374 select KCMP
1375 default n
1376 help
1377 Enables additional kernel features in a sake of checkpoint/restore.
1378 In particular it adds auxiliary prctl codes to setup process text,
1379 data and heap segment sizes, and a few additional /proc filesystem
1380 entries.
1381
1382 If unsure, say N here.
1383
1384config SCHED_AUTOGROUP
1385 bool "Automatic process group scheduling"
1386 select CGROUPS
1387 select CGROUP_SCHED
1388 select FAIR_GROUP_SCHED
1389 help
1390 This option optimizes the scheduler for common desktop workloads by
1391 automatically creating and populating task groups. This separation
1392 of workloads isolates aggressive CPU burners (like build jobs) from
1393 desktop applications. Task group autogeneration is currently based
1394 upon task session.
1395
1396config RELAY
1397 bool "Kernel->user space relay support (formerly relayfs)"
1398 select IRQ_WORK
1399 help
1400 This option enables support for relay interface support in
1401 certain file systems (such as debugfs).
1402 It is designed to provide an efficient mechanism for tools and
1403 facilities to relay large amounts of data from kernel space to
1404 user space.
1405
1406 If unsure, say N.
1407
1408config BLK_DEV_INITRD
1409 bool "Initial RAM filesystem and RAM disk (initramfs/initrd) support"
1410 help
1411 The initial RAM filesystem is a ramfs which is loaded by the
1412 boot loader (loadlin or lilo) and that is mounted as root
1413 before the normal boot procedure. It is typically used to
1414 load modules needed to mount the "real" root file system,
1415 etc. See <file:Documentation/admin-guide/initrd.rst> for details.
1416
1417 If RAM disk support (BLK_DEV_RAM) is also included, this
1418 also enables initial RAM disk (initrd) support and adds
1419 15 Kbytes (more on some other architectures) to the kernel size.
1420
1421 If unsure say Y.
1422
1423if BLK_DEV_INITRD
1424
1425source "usr/Kconfig"
1426
1427endif
1428
1429config BOOT_CONFIG
1430 bool "Boot config support"
1431 select BLK_DEV_INITRD if !BOOT_CONFIG_EMBED
1432 help
1433 Extra boot config allows system admin to pass a config file as
1434 complemental extension of kernel cmdline when booting.
1435 The boot config file must be attached at the end of initramfs
1436 with checksum, size and magic word.
1437 See <file:Documentation/admin-guide/bootconfig.rst> for details.
1438
1439 If unsure, say Y.
1440
1441config BOOT_CONFIG_FORCE
1442 bool "Force unconditional bootconfig processing"
1443 depends on BOOT_CONFIG
1444 default y if BOOT_CONFIG_EMBED
1445 help
1446 With this Kconfig option set, BOOT_CONFIG processing is carried
1447 out even when the "bootconfig" kernel-boot parameter is omitted.
1448 In fact, with this Kconfig option set, there is no way to
1449 make the kernel ignore the BOOT_CONFIG-supplied kernel-boot
1450 parameters.
1451
1452 If unsure, say N.
1453
1454config BOOT_CONFIG_EMBED
1455 bool "Embed bootconfig file in the kernel"
1456 depends on BOOT_CONFIG
1457 help
1458 Embed a bootconfig file given by BOOT_CONFIG_EMBED_FILE in the
1459 kernel. Usually, the bootconfig file is loaded with the initrd
1460 image. But if the system doesn't support initrd, this option will
1461 help you by embedding a bootconfig file while building the kernel.
1462
1463 If unsure, say N.
1464
1465config BOOT_CONFIG_EMBED_FILE
1466 string "Embedded bootconfig file path"
1467 depends on BOOT_CONFIG_EMBED
1468 help
1469 Specify a bootconfig file which will be embedded to the kernel.
1470 This bootconfig will be used if there is no initrd or no other
1471 bootconfig in the initrd.
1472
1473config INITRAMFS_PRESERVE_MTIME
1474 bool "Preserve cpio archive mtimes in initramfs"
1475 default y
1476 help
1477 Each entry in an initramfs cpio archive carries an mtime value. When
1478 enabled, extracted cpio items take this mtime, with directory mtime
1479 setting deferred until after creation of any child entries.
1480
1481 If unsure, say Y.
1482
1483config INITRAMFS_TEST
1484 bool "Test initramfs cpio archive extraction" if !KUNIT_ALL_TESTS
1485 depends on BLK_DEV_INITRD && KUNIT=y
1486 default KUNIT_ALL_TESTS
1487 help
1488 Build KUnit tests for initramfs. See Documentation/dev-tools/kunit
1489
1490choice
1491 prompt "Compiler optimization level"
1492 default CC_OPTIMIZE_FOR_PERFORMANCE
1493
1494config CC_OPTIMIZE_FOR_PERFORMANCE
1495 bool "Optimize for performance (-O2)"
1496 help
1497 This is the default optimization level for the kernel, building
1498 with the "-O2" compiler flag for best performance and most
1499 helpful compile-time warnings.
1500
1501config CC_OPTIMIZE_FOR_SIZE
1502 bool "Optimize for size (-Os)"
1503 help
1504 Choosing this option will pass "-Os" to your compiler resulting
1505 in a smaller kernel.
1506
1507endchoice
1508
1509config HAVE_LD_DEAD_CODE_DATA_ELIMINATION
1510 bool
1511 help
1512 This requires that the arch annotates or otherwise protects
1513 its external entry points from being discarded. Linker scripts
1514 must also merge .text.*, .data.*, and .bss.* correctly into
1515 output sections. Care must be taken not to pull in unrelated
1516 sections (e.g., '.text.init'). Typically '.' in section names
1517 is used to distinguish them from label names / C identifiers.
1518
1519config LD_DEAD_CODE_DATA_ELIMINATION
1520 bool "Dead code and data elimination (EXPERIMENTAL)"
1521 depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION
1522 depends on EXPERT
1523 depends on $(cc-option,-ffunction-sections -fdata-sections)
1524 depends on $(ld-option,--gc-sections)
1525 help
1526 Enable this if you want to do dead code and data elimination with
1527 the linker by compiling with -ffunction-sections -fdata-sections,
1528 and linking with --gc-sections.
1529
1530 This can reduce on disk and in-memory size of the kernel
1531 code and static data, particularly for small configs and
1532 on small systems. This has the possibility of introducing
1533 silently broken kernel if the required annotations are not
1534 present. This option is not well tested yet, so use at your
1535 own risk.
1536
1537config LD_ORPHAN_WARN
1538 def_bool y
1539 depends on ARCH_WANT_LD_ORPHAN_WARN
1540 depends on $(ld-option,--orphan-handling=warn)
1541 depends on $(ld-option,--orphan-handling=error)
1542
1543config LD_ORPHAN_WARN_LEVEL
1544 string
1545 depends on LD_ORPHAN_WARN
1546 default "error" if WERROR
1547 default "warn"
1548
1549config SYSCTL
1550 bool
1551
1552config HAVE_UID16
1553 bool
1554
1555config SYSCTL_EXCEPTION_TRACE
1556 bool
1557 help
1558 Enable support for /proc/sys/debug/exception-trace.
1559
1560config SYSCTL_ARCH_UNALIGN_NO_WARN
1561 bool
1562 help
1563 Enable support for /proc/sys/kernel/ignore-unaligned-usertrap
1564 Allows arch to define/use @no_unaligned_warning to possibly warn
1565 about unaligned access emulation going on under the hood.
1566
1567config SYSCTL_ARCH_UNALIGN_ALLOW
1568 bool
1569 help
1570 Enable support for /proc/sys/kernel/unaligned-trap
1571 Allows arches to define/use @unaligned_enabled to runtime toggle
1572 the unaligned access emulation.
1573 see arch/parisc/kernel/unaligned.c for reference
1574
1575config SYSFS_SYSCALL
1576 bool "Sysfs syscall support"
1577 default n
1578 help
1579 sys_sysfs is an obsolete system call no longer supported in libc.
1580 Note that disabling this option is more secure but might break
1581 compatibility with some systems.
1582
1583 If unsure say N here.
1584
1585config HAVE_PCSPKR_PLATFORM
1586 bool
1587
1588menuconfig EXPERT
1589 bool "Configure standard kernel features (expert users)"
1590 # Unhide debug options, to make the on-by-default options visible
1591 select DEBUG_KERNEL
1592 help
1593 This option allows certain base kernel options and settings
1594 to be disabled or tweaked. This is for specialized
1595 environments which can tolerate a "non-standard" kernel.
1596 Only use this if you really know what you are doing.
1597
1598config UID16
1599 bool "Enable 16-bit UID system calls" if EXPERT
1600 depends on HAVE_UID16 && MULTIUSER
1601 default y
1602 help
1603 This enables the legacy 16-bit UID syscall wrappers.
1604
1605config MULTIUSER
1606 bool "Multiple users, groups and capabilities support" if EXPERT
1607 default y
1608 help
1609 This option enables support for non-root users, groups and
1610 capabilities.
1611
1612 If you say N here, all processes will run with UID 0, GID 0, and all
1613 possible capabilities. Saying N here also compiles out support for
1614 system calls related to UIDs, GIDs, and capabilities, such as setuid,
1615 setgid, and capset.
1616
1617 If unsure, say Y here.
1618
1619config SGETMASK_SYSCALL
1620 bool "sgetmask/ssetmask syscalls support" if EXPERT
1621 default PARISC || M68K || PPC || MIPS || X86 || SPARC || MICROBLAZE || SUPERH
1622 help
1623 sys_sgetmask and sys_ssetmask are obsolete system calls
1624 no longer supported in libc but still enabled by default in some
1625 architectures.
1626
1627 If unsure, leave the default option here.
1628
1629config FHANDLE
1630 bool "open by fhandle syscalls" if EXPERT
1631 select EXPORTFS
1632 default y
1633 help
1634 If you say Y here, a user level program will be able to map
1635 file names to handle and then later use the handle for
1636 different file system operations. This is useful in implementing
1637 userspace file servers, which now track files using handles instead
1638 of names. The handle would remain the same even if file names
1639 get renamed. Enables open_by_handle_at(2) and name_to_handle_at(2)
1640 syscalls.
1641
1642config POSIX_TIMERS
1643 bool "Posix Clocks & timers" if EXPERT
1644 default y
1645 help
1646 This includes native support for POSIX timers to the kernel.
1647 Some embedded systems have no use for them and therefore they
1648 can be configured out to reduce the size of the kernel image.
1649
1650 When this option is disabled, the following syscalls won't be
1651 available: timer_create, timer_gettime: timer_getoverrun,
1652 timer_settime, timer_delete, clock_adjtime, getitimer,
1653 setitimer, alarm. Furthermore, the clock_settime, clock_gettime,
1654 clock_getres and clock_nanosleep syscalls will be limited to
1655 CLOCK_REALTIME, CLOCK_MONOTONIC and CLOCK_BOOTTIME only.
1656
1657 If unsure say y.
1658
1659config PRINTK
1660 default y
1661 bool "Enable support for printk" if EXPERT
1662 select IRQ_WORK
1663 help
1664 This option enables normal printk support. Removing it
1665 eliminates most of the message strings from the kernel image
1666 and makes the kernel more or less silent. As this makes it
1667 very difficult to diagnose system problems, saying N here is
1668 strongly discouraged.
1669
1670config BUG
1671 bool "BUG() support" if EXPERT
1672 default y
1673 help
1674 Disabling this option eliminates support for BUG and WARN, reducing
1675 the size of your kernel image and potentially quietly ignoring
1676 numerous fatal conditions. You should only consider disabling this
1677 option for embedded systems with no facilities for reporting errors.
1678 Just say Y.
1679
1680config ELF_CORE
1681 depends on COREDUMP
1682 default y
1683 bool "Enable ELF core dumps" if EXPERT
1684 help
1685 Enable support for generating core dumps. Disabling saves about 4k.
1686
1687
1688config PCSPKR_PLATFORM
1689 bool "Enable PC-Speaker support" if EXPERT
1690 depends on HAVE_PCSPKR_PLATFORM
1691 select I8253_LOCK
1692 default y
1693 help
1694 This option allows to disable the internal PC-Speaker
1695 support, saving some memory.
1696
1697config BASE_SMALL
1698 bool "Enable smaller-sized data structures for core" if EXPERT
1699 help
1700 Enabling this option reduces the size of miscellaneous core
1701 kernel data structures. This saves memory on small machines,
1702 but may reduce performance.
1703
1704config FUTEX
1705 bool "Enable futex support" if EXPERT
1706 depends on !(SPARC32 && SMP)
1707 default y
1708 imply RT_MUTEXES
1709 help
1710 Disabling this option will cause the kernel to be built without
1711 support for "fast userspace mutexes". The resulting kernel may not
1712 run glibc-based applications correctly.
1713
1714config FUTEX_PI
1715 bool
1716 depends on FUTEX && RT_MUTEXES
1717 default y
1718
1719#
1720# marked broken for performance reasons; gives us one more cycle to sort things out.
1721#
1722config FUTEX_PRIVATE_HASH
1723 bool
1724 depends on FUTEX && !BASE_SMALL && MMU
1725 depends on BROKEN
1726 default y
1727
1728config FUTEX_MPOL
1729 bool
1730 depends on FUTEX && NUMA
1731 default y
1732
1733config EPOLL
1734 bool "Enable eventpoll support" if EXPERT
1735 default y
1736 help
1737 Disabling this option will cause the kernel to be built without
1738 support for epoll family of system calls.
1739
1740config SIGNALFD
1741 bool "Enable signalfd() system call" if EXPERT
1742 default y
1743 help
1744 Enable the signalfd() system call that allows to receive signals
1745 on a file descriptor.
1746
1747 If unsure, say Y.
1748
1749config TIMERFD
1750 bool "Enable timerfd() system call" if EXPERT
1751 default y
1752 help
1753 Enable the timerfd() system call that allows to receive timer
1754 events on a file descriptor.
1755
1756 If unsure, say Y.
1757
1758config EVENTFD
1759 bool "Enable eventfd() system call" if EXPERT
1760 default y
1761 help
1762 Enable the eventfd() system call that allows to receive both
1763 kernel notification (ie. KAIO) or userspace notifications.
1764
1765 If unsure, say Y.
1766
1767config SHMEM
1768 bool "Use full shmem filesystem" if EXPERT
1769 default y
1770 depends on MMU
1771 help
1772 The shmem is an internal filesystem used to manage shared memory.
1773 It is backed by swap and manages resource limits. It is also exported
1774 to userspace as tmpfs if TMPFS is enabled. Disabling this
1775 option replaces shmem and tmpfs with the much simpler ramfs code,
1776 which may be appropriate on small systems without swap.
1777
1778config AIO
1779 bool "Enable AIO support" if EXPERT
1780 default y
1781 help
1782 This option enables POSIX asynchronous I/O which may by used
1783 by some high performance threaded applications. Disabling
1784 this option saves about 7k.
1785
1786config IO_URING
1787 bool "Enable IO uring support" if EXPERT
1788 select IO_WQ
1789 default y
1790 help
1791 This option enables support for the io_uring interface, enabling
1792 applications to submit and complete IO through submission and
1793 completion rings that are shared between the kernel and application.
1794
1795config GCOV_PROFILE_URING
1796 bool "Enable GCOV profiling on the io_uring subsystem"
1797 depends on GCOV_KERNEL
1798 help
1799 Enable GCOV profiling on the io_uring subsystem, to facilitate
1800 code coverage testing.
1801
1802 If unsure, say N.
1803
1804 Note that this will have a negative impact on the performance of
1805 the io_uring subsystem, hence this should only be enabled for
1806 specific test purposes.
1807
1808config ADVISE_SYSCALLS
1809 bool "Enable madvise/fadvise syscalls" if EXPERT
1810 default y
1811 help
1812 This option enables the madvise and fadvise syscalls, used by
1813 applications to advise the kernel about their future memory or file
1814 usage, improving performance. If building an embedded system where no
1815 applications use these syscalls, you can disable this option to save
1816 space.
1817
1818config MEMBARRIER
1819 bool "Enable membarrier() system call" if EXPERT
1820 default y
1821 help
1822 Enable the membarrier() system call that allows issuing memory
1823 barriers across all running threads, which can be used to distribute
1824 the cost of user-space memory barriers asymmetrically by transforming
1825 pairs of memory barriers into pairs consisting of membarrier() and a
1826 compiler barrier.
1827
1828 If unsure, say Y.
1829
1830config KCMP
1831 bool "Enable kcmp() system call" if EXPERT
1832 help
1833 Enable the kernel resource comparison system call. It provides
1834 user-space with the ability to compare two processes to see if they
1835 share a common resource, such as a file descriptor or even virtual
1836 memory space.
1837
1838 If unsure, say N.
1839
1840config RSEQ
1841 bool "Enable rseq() system call" if EXPERT
1842 default y
1843 depends on HAVE_RSEQ
1844 select MEMBARRIER
1845 help
1846 Enable the restartable sequences system call. It provides a
1847 user-space cache for the current CPU number value, which
1848 speeds up getting the current CPU number from user-space,
1849 as well as an ABI to speed up user-space operations on
1850 per-CPU data.
1851
1852 If unsure, say Y.
1853
1854config DEBUG_RSEQ
1855 default n
1856 bool "Enable debugging of rseq() system call" if EXPERT
1857 depends on RSEQ && DEBUG_KERNEL
1858 help
1859 Enable extra debugging checks for the rseq system call.
1860
1861 If unsure, say N.
1862
1863config CACHESTAT_SYSCALL
1864 bool "Enable cachestat() system call" if EXPERT
1865 default y
1866 help
1867 Enable the cachestat system call, which queries the page cache
1868 statistics of a file (number of cached pages, dirty pages,
1869 pages marked for writeback, (recently) evicted pages).
1870
1871 If unsure say Y here.
1872
1873config PC104
1874 bool "PC/104 support" if EXPERT
1875 help
1876 Expose PC/104 form factor device drivers and options available for
1877 selection and configuration. Enable this option if your target
1878 machine has a PC/104 bus.
1879
1880config KALLSYMS
1881 bool "Load all symbols for debugging/ksymoops" if EXPERT
1882 default y
1883 help
1884 Say Y here to let the kernel print out symbolic crash information and
1885 symbolic stack backtraces. This increases the size of the kernel
1886 somewhat, as all symbols have to be loaded into the kernel image.
1887
1888config KALLSYMS_SELFTEST
1889 bool "Test the basic functions and performance of kallsyms"
1890 depends on KALLSYMS
1891 default n
1892 help
1893 Test the basic functions and performance of some interfaces, such as
1894 kallsyms_lookup_name. It also calculates the compression rate of the
1895 kallsyms compression algorithm for the current symbol set.
1896
1897 Start self-test automatically after system startup. Suggest executing
1898 "dmesg | grep kallsyms_selftest" to collect test results. "finish" is
1899 displayed in the last line, indicating that the test is complete.
1900
1901config KALLSYMS_ALL
1902 bool "Include all symbols in kallsyms"
1903 depends on DEBUG_KERNEL && KALLSYMS
1904 help
1905 Normally kallsyms only contains the symbols of functions for nicer
1906 OOPS messages and backtraces (i.e., symbols from the text and inittext
1907 sections). This is sufficient for most cases. And only if you want to
1908 enable kernel live patching, or other less common use cases (e.g.,
1909 when a debugger is used) all symbols are required (i.e., names of
1910 variables from the data sections, etc).
1911
1912 This option makes sure that all symbols are loaded into the kernel
1913 image (i.e., symbols from all sections) in cost of increased kernel
1914 size (depending on the kernel configuration, it may be 300KiB or
1915 something like this).
1916
1917 Say N unless you really need all symbols, or kernel live patching.
1918
1919# end of the "standard kernel features (expert users)" menu
1920
1921config ARCH_HAS_MEMBARRIER_CALLBACKS
1922 bool
1923
1924config ARCH_HAS_MEMBARRIER_SYNC_CORE
1925 bool
1926
1927config ARCH_SUPPORTS_MSEAL_SYSTEM_MAPPINGS
1928 bool
1929 help
1930 Control MSEAL_SYSTEM_MAPPINGS access based on architecture.
1931
1932 A 64-bit kernel is required for the memory sealing feature.
1933 No specific hardware features from the CPU are needed.
1934
1935 To enable this feature, the architecture needs to update their
1936 special mappings calls to include the sealing flag and confirm
1937 that it doesn't unmap/remap system mappings during the life
1938 time of the process. The existence of this flag for an architecture
1939 implies that it does not require the remapping of the system
1940 mappings during process lifetime, so sealing these mappings is safe
1941 from a kernel perspective.
1942
1943 After the architecture enables this, a distribution can set
1944 CONFIG_MSEAL_SYSTEM_MAPPING to manage access to the feature.
1945
1946 For complete descriptions of memory sealing, please see
1947 Documentation/userspace-api/mseal.rst
1948
1949config HAVE_PERF_EVENTS
1950 bool
1951 help
1952 See tools/perf/design.txt for details.
1953
1954config GUEST_PERF_EVENTS
1955 bool
1956 depends on HAVE_PERF_EVENTS
1957
1958config PERF_USE_VMALLOC
1959 bool
1960 help
1961 See tools/perf/design.txt for details
1962
1963menu "Kernel Performance Events And Counters"
1964
1965config PERF_EVENTS
1966 bool "Kernel performance events and counters"
1967 default y if PROFILING
1968 depends on HAVE_PERF_EVENTS
1969 select IRQ_WORK
1970 help
1971 Enable kernel support for various performance events provided
1972 by software and hardware.
1973
1974 Software events are supported either built-in or via the
1975 use of generic tracepoints.
1976
1977 Most modern CPUs support performance events via performance
1978 counter registers. These registers count the number of certain
1979 types of hw events: such as instructions executed, cachemisses
1980 suffered, or branches mis-predicted - without slowing down the
1981 kernel or applications. These registers can also trigger interrupts
1982 when a threshold number of events have passed - and can thus be
1983 used to profile the code that runs on that CPU.
1984
1985 The Linux Performance Event subsystem provides an abstraction of
1986 these software and hardware event capabilities, available via a
1987 system call and used by the "perf" utility in tools/perf/. It
1988 provides per task and per CPU counters, and it provides event
1989 capabilities on top of those.
1990
1991 Say Y if unsure.
1992
1993config DEBUG_PERF_USE_VMALLOC
1994 default n
1995 bool "Debug: use vmalloc to back perf mmap() buffers"
1996 depends on PERF_EVENTS && DEBUG_KERNEL && !PPC
1997 select PERF_USE_VMALLOC
1998 help
1999 Use vmalloc memory to back perf mmap() buffers.
2000
2001 Mostly useful for debugging the vmalloc code on platforms
2002 that don't require it.
2003
2004 Say N if unsure.
2005
2006endmenu
2007
2008config SYSTEM_DATA_VERIFICATION
2009 def_bool n
2010 select SYSTEM_TRUSTED_KEYRING
2011 select KEYS
2012 select CRYPTO
2013 select CRYPTO_RSA
2014 select ASYMMETRIC_KEY_TYPE
2015 select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
2016 select ASN1
2017 select OID_REGISTRY
2018 select X509_CERTIFICATE_PARSER
2019 select PKCS7_MESSAGE_PARSER
2020 help
2021 Provide PKCS#7 message verification using the contents of the system
2022 trusted keyring to provide public keys. This then can be used for
2023 module verification, kexec image verification and firmware blob
2024 verification.
2025
2026config PROFILING
2027 bool "Profiling support"
2028 help
2029 Say Y here to enable the extended profiling support mechanisms used
2030 by profilers.
2031
2032config RUST
2033 bool "Rust support"
2034 depends on HAVE_RUST
2035 depends on RUST_IS_AVAILABLE
2036 select EXTENDED_MODVERSIONS if MODVERSIONS
2037 depends on !MODVERSIONS || GENDWARFKSYMS
2038 depends on !GCC_PLUGIN_RANDSTRUCT
2039 depends on !RANDSTRUCT
2040 depends on !DEBUG_INFO_BTF || (PAHOLE_HAS_LANG_EXCLUDE && !LTO)
2041 depends on !CFI_CLANG || HAVE_CFI_ICALL_NORMALIZE_INTEGERS_RUSTC
2042 select CFI_ICALL_NORMALIZE_INTEGERS if CFI_CLANG
2043 depends on !CALL_PADDING || RUSTC_VERSION >= 108100
2044 depends on !KASAN_SW_TAGS
2045 depends on !(MITIGATION_RETHUNK && KASAN) || RUSTC_VERSION >= 108300
2046 help
2047 Enables Rust support in the kernel.
2048
2049 This allows other Rust-related options, like drivers written in Rust,
2050 to be selected.
2051
2052 It is also required to be able to load external kernel modules
2053 written in Rust.
2054
2055 See Documentation/rust/ for more information.
2056
2057 If unsure, say N.
2058
2059config RUSTC_VERSION_TEXT
2060 string
2061 depends on RUST
2062 default "$(RUSTC_VERSION_TEXT)"
2063 help
2064 See `CC_VERSION_TEXT`.
2065
2066config BINDGEN_VERSION_TEXT
2067 string
2068 depends on RUST
2069 # The dummy parameter `workaround-for-0.69.0` is required to support 0.69.0
2070 # (https://github.com/rust-lang/rust-bindgen/pull/2678) and 0.71.0
2071 # (https://github.com/rust-lang/rust-bindgen/pull/3040). It can be removed
2072 # when the minimum version is upgraded past the latter (0.69.1 and 0.71.1
2073 # both fixed the issue).
2074 default "$(shell,$(BINDGEN) --version workaround-for-0.69.0 2>/dev/null)"
2075
2076#
2077# Place an empty function call at each tracepoint site. Can be
2078# dynamically changed for a probe function.
2079#
2080config TRACEPOINTS
2081 bool
2082 select TASKS_TRACE_RCU
2083
2084source "kernel/Kconfig.kexec"
2085
2086endmenu # General setup
2087
2088source "arch/Kconfig"
2089
2090config RT_MUTEXES
2091 bool
2092 default y if PREEMPT_RT
2093
2094config MODULE_SIG_FORMAT
2095 def_bool n
2096 select SYSTEM_DATA_VERIFICATION
2097
2098source "kernel/module/Kconfig"
2099
2100config INIT_ALL_POSSIBLE
2101 bool
2102 help
2103 Back when each arch used to define their own cpu_online_mask and
2104 cpu_possible_mask, some of them chose to initialize cpu_possible_mask
2105 with all 1s, and others with all 0s. When they were centralised,
2106 it was better to provide this option than to break all the archs
2107 and have several arch maintainers pursuing me down dark alleys.
2108
2109source "block/Kconfig"
2110
2111config PREEMPT_NOTIFIERS
2112 bool
2113
2114config PADATA
2115 depends on SMP
2116 bool
2117
2118config ASN1
2119 tristate
2120 help
2121 Build a simple ASN.1 grammar compiler that produces a bytecode output
2122 that can be interpreted by the ASN.1 stream decoder and used to
2123 inform it as to what tags are to be expected in a stream and what
2124 functions to call on what tags.
2125
2126source "kernel/Kconfig.locks"
2127
2128config ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
2129 bool
2130
2131config ARCH_HAS_PREPARE_SYNC_CORE_CMD
2132 bool
2133
2134config ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
2135 bool
2136
2137# It may be useful for an architecture to override the definitions of the
2138# SYSCALL_DEFINE() and __SYSCALL_DEFINEx() macros in <linux/syscalls.h>
2139# and the COMPAT_ variants in <linux/compat.h>, in particular to use a
2140# different calling convention for syscalls. They can also override the
2141# macros for not-implemented syscalls in kernel/sys_ni.c and
2142# kernel/time/posix-stubs.c. All these overrides need to be available in
2143# <asm/syscall_wrapper.h>.
2144config ARCH_HAS_SYSCALL_WRAPPER
2145 def_bool n