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