xref: /openbmc/linux/init/Kconfig (revision 3c881e05c814c970e4f9577446a9d3461d134607)
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:
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 
19 config CC_IS_GCC
20 	def_bool $(success,test "$(cc-name)" = GCC)
21 
22 config GCC_VERSION
23 	int
24 	default $(cc-version) if CC_IS_GCC
25 	default 0
26 
27 config CC_IS_CLANG
28 	def_bool $(success,test "$(cc-name)" = Clang)
29 
30 config CLANG_VERSION
31 	int
32 	default $(cc-version) if CC_IS_CLANG
33 	default 0
34 
35 config AS_IS_GNU
36 	def_bool $(success,test "$(as-name)" = GNU)
37 
38 config AS_IS_LLVM
39 	def_bool $(success,test "$(as-name)" = LLVM)
40 
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)
46 
47 config LD_IS_BFD
48 	def_bool $(success,test "$(ld-name)" = BFD)
49 
50 config LD_VERSION
51 	int
52 	default $(ld-version) if LD_IS_BFD
53 	default 0
54 
55 config LD_IS_LLD
56 	def_bool $(success,test "$(ld-name)" = LLD)
57 
58 config LLD_VERSION
59 	int
60 	default $(ld-version) if LD_IS_LLD
61 	default 0
62 
63 config CC_CAN_LINK
64 	bool
65 	default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(m64-flag)) if 64BIT
66 	default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(m32-flag))
67 
68 config CC_CAN_LINK_STATIC
69 	bool
70 	default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(m64-flag) -static) if 64BIT
71 	default $(success,$(srctree)/scripts/cc-can-link.sh $(CC) $(CLANG_FLAGS) $(m32-flag) -static)
72 
73 config CC_HAS_ASM_GOTO
74 	def_bool $(success,$(srctree)/scripts/gcc-goto.sh $(CC))
75 
76 config CC_HAS_ASM_GOTO_OUTPUT
77 	depends on CC_HAS_ASM_GOTO
78 	def_bool $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null)
79 
80 config TOOLS_SUPPORT_RELR
81 	def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh)
82 
83 config CC_HAS_ASM_INLINE
84 	def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null)
85 
86 config CONSTRUCTORS
87 	bool
88 
89 config IRQ_WORK
90 	bool
91 
92 config BUILDTIME_TABLE_SORT
93 	bool
94 
95 config THREAD_INFO_IN_TASK
96 	bool
97 	help
98 	  Select this to move thread_info off the stack into task_struct.  To
99 	  make this work, an arch will need to remove all thread_info fields
100 	  except flags and fix any runtime bugs.
101 
102 	  One subtle change that will be needed is to use try_get_task_stack()
103 	  and put_task_stack() in save_thread_stack_tsk() and get_wchan().
104 
105 menu "General setup"
106 
107 config BROKEN
108 	bool
109 
110 config BROKEN_ON_SMP
111 	bool
112 	depends on BROKEN || !SMP
113 	default y
114 
115 config INIT_ENV_ARG_LIMIT
116 	int
117 	default 32 if !UML
118 	default 128 if UML
119 	help
120 	  Maximum of each of the number of arguments and environment
121 	  variables passed to init from the kernel command line.
122 
123 config COMPILE_TEST
124 	bool "Compile also drivers which will not load"
125 	depends on HAS_IOMEM
126 	help
127 	  Some drivers can be compiled on a different platform than they are
128 	  intended to be run on. Despite they cannot be loaded there (or even
129 	  when they load they cannot be used due to missing HW support),
130 	  developers still, opposing to distributors, might want to build such
131 	  drivers to compile-test them.
132 
133 	  If you are a developer and want to build everything available, say Y
134 	  here. If you are a user/distributor, say N here to exclude useless
135 	  drivers to be distributed.
136 
137 config UAPI_HEADER_TEST
138 	bool "Compile test UAPI headers"
139 	depends on HEADERS_INSTALL && CC_CAN_LINK
140 	help
141 	  Compile test headers exported to user-space to ensure they are
142 	  self-contained, i.e. compilable as standalone units.
143 
144 	  If you are a developer or tester and want to ensure the exported
145 	  headers are self-contained, say Y here. Otherwise, choose N.
146 
147 config LOCALVERSION
148 	string "Local version - append to kernel release"
149 	help
150 	  Append an extra string to the end of your kernel version.
151 	  This will show up when you type uname, for example.
152 	  The string you set here will be appended after the contents of
153 	  any files with a filename matching localversion* in your
154 	  object and source tree, in that order.  Your total string can
155 	  be a maximum of 64 characters.
156 
157 config LOCALVERSION_AUTO
158 	bool "Automatically append version information to the version string"
159 	default y
160 	depends on !COMPILE_TEST
161 	help
162 	  This will try to automatically determine if the current tree is a
163 	  release tree by looking for git tags that belong to the current
164 	  top of tree revision.
165 
166 	  A string of the format -gxxxxxxxx will be added to the localversion
167 	  if a git-based tree is found.  The string generated by this will be
168 	  appended after any matching localversion* files, and after the value
169 	  set in CONFIG_LOCALVERSION.
170 
171 	  (The actual string used here is the first eight characters produced
172 	  by running the command:
173 
174 	    $ git rev-parse --verify HEAD
175 
176 	  which is done within the script "scripts/setlocalversion".)
177 
178 config BUILD_SALT
179 	string "Build ID Salt"
180 	default ""
181 	help
182 	  The build ID is used to link binaries and their debug info. Setting
183 	  this option will use the value in the calculation of the build id.
184 	  This is mostly useful for distributions which want to ensure the
185 	  build is unique between builds. It's safe to leave the default.
186 
187 config HAVE_KERNEL_GZIP
188 	bool
189 
190 config HAVE_KERNEL_BZIP2
191 	bool
192 
193 config HAVE_KERNEL_LZMA
194 	bool
195 
196 config HAVE_KERNEL_XZ
197 	bool
198 
199 config HAVE_KERNEL_LZO
200 	bool
201 
202 config HAVE_KERNEL_LZ4
203 	bool
204 
205 config HAVE_KERNEL_ZSTD
206 	bool
207 
208 config HAVE_KERNEL_UNCOMPRESSED
209 	bool
210 
211 choice
212 	prompt "Kernel compression mode"
213 	default KERNEL_GZIP
214 	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
215 	help
216 	  The linux kernel is a kind of self-extracting executable.
217 	  Several compression algorithms are available, which differ
218 	  in efficiency, compression and decompression speed.
219 	  Compression speed is only relevant when building a kernel.
220 	  Decompression speed is relevant at each boot.
221 
222 	  If you have any problems with bzip2 or lzma compressed
223 	  kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older
224 	  version of this functionality (bzip2 only), for 2.4, was
225 	  supplied by Christian Ludwig)
226 
227 	  High compression options are mostly useful for users, who
228 	  are low on disk space (embedded systems), but for whom ram
229 	  size matters less.
230 
231 	  If in doubt, select 'gzip'
232 
233 config KERNEL_GZIP
234 	bool "Gzip"
235 	depends on HAVE_KERNEL_GZIP
236 	help
237 	  The old and tried gzip compression. It provides a good balance
238 	  between compression ratio and decompression speed.
239 
240 config KERNEL_BZIP2
241 	bool "Bzip2"
242 	depends on HAVE_KERNEL_BZIP2
243 	help
244 	  Its compression ratio and speed is intermediate.
245 	  Decompression speed is slowest among the choices.  The kernel
246 	  size is about 10% smaller with bzip2, in comparison to gzip.
247 	  Bzip2 uses a large amount of memory. For modern kernels you
248 	  will need at least 8MB RAM or more for booting.
249 
250 config KERNEL_LZMA
251 	bool "LZMA"
252 	depends on HAVE_KERNEL_LZMA
253 	help
254 	  This compression algorithm's ratio is best.  Decompression speed
255 	  is between gzip and bzip2.  Compression is slowest.
256 	  The kernel size is about 33% smaller with LZMA in comparison to gzip.
257 
258 config KERNEL_XZ
259 	bool "XZ"
260 	depends on HAVE_KERNEL_XZ
261 	help
262 	  XZ uses the LZMA2 algorithm and instruction set specific
263 	  BCJ filters which can improve compression ratio of executable
264 	  code. The size of the kernel is about 30% smaller with XZ in
265 	  comparison to gzip. On architectures for which there is a BCJ
266 	  filter (i386, x86_64, ARM, IA-64, PowerPC, and SPARC), XZ
267 	  will create a few percent smaller kernel than plain LZMA.
268 
269 	  The speed is about the same as with LZMA: The decompression
270 	  speed of XZ is better than that of bzip2 but worse than gzip
271 	  and LZO. Compression is slow.
272 
273 config KERNEL_LZO
274 	bool "LZO"
275 	depends on HAVE_KERNEL_LZO
276 	help
277 	  Its compression ratio is the poorest among the choices. The kernel
278 	  size is about 10% bigger than gzip; however its speed
279 	  (both compression and decompression) is the fastest.
280 
281 config KERNEL_LZ4
282 	bool "LZ4"
283 	depends on HAVE_KERNEL_LZ4
284 	help
285 	  LZ4 is an LZ77-type compressor with a fixed, byte-oriented encoding.
286 	  A preliminary version of LZ4 de/compression tool is available at
287 	  <https://code.google.com/p/lz4/>.
288 
289 	  Its compression ratio is worse than LZO. The size of the kernel
290 	  is about 8% bigger than LZO. But the decompression speed is
291 	  faster than LZO.
292 
293 config KERNEL_ZSTD
294 	bool "ZSTD"
295 	depends on HAVE_KERNEL_ZSTD
296 	help
297 	  ZSTD is a compression algorithm targeting intermediate compression
298 	  with fast decompression speed. It will compress better than GZIP and
299 	  decompress around the same speed as LZO, but slower than LZ4. You
300 	  will need at least 192 KB RAM or more for booting. The zstd command
301 	  line tool is required for compression.
302 
303 config KERNEL_UNCOMPRESSED
304 	bool "None"
305 	depends on HAVE_KERNEL_UNCOMPRESSED
306 	help
307 	  Produce uncompressed kernel image. This option is usually not what
308 	  you want. It is useful for debugging the kernel in slow simulation
309 	  environments, where decompressing and moving the kernel is awfully
310 	  slow. This option allows early boot code to skip the decompressor
311 	  and jump right at uncompressed kernel image.
312 
313 endchoice
314 
315 config DEFAULT_INIT
316 	string "Default init path"
317 	default ""
318 	help
319 	  This option determines the default init for the system if no init=
320 	  option is passed on the kernel command line. If the requested path is
321 	  not present, we will still then move on to attempting further
322 	  locations (e.g. /sbin/init, etc). If this is empty, we will just use
323 	  the fallback list when init= is not passed.
324 
325 config DEFAULT_HOSTNAME
326 	string "Default hostname"
327 	default "(none)"
328 	help
329 	  This option determines the default system hostname before userspace
330 	  calls sethostname(2). The kernel traditionally uses "(none)" here,
331 	  but you may wish to use a different default here to make a minimal
332 	  system more usable with less configuration.
333 
334 #
335 # For some reason microblaze and nios2 hard code SWAP=n.  Hopefully we can
336 # add proper SWAP support to them, in which case this can be remove.
337 #
338 config ARCH_NO_SWAP
339 	bool
340 
341 config SWAP
342 	bool "Support for paging of anonymous memory (swap)"
343 	depends on MMU && BLOCK && !ARCH_NO_SWAP
344 	default y
345 	help
346 	  This option allows you to choose whether you want to have support
347 	  for so called swap devices or swap files in your kernel that are
348 	  used to provide more virtual memory than the actual RAM present
349 	  in your computer.  If unsure say Y.
350 
351 config SYSVIPC
352 	bool "System V IPC"
353 	help
354 	  Inter Process Communication is a suite of library functions and
355 	  system calls which let processes (running programs) synchronize and
356 	  exchange information. It is generally considered to be a good thing,
357 	  and some programs won't run unless you say Y here. In particular, if
358 	  you want to run the DOS emulator dosemu under Linux (read the
359 	  DOSEMU-HOWTO, available from <http://www.tldp.org/docs.html#howto>),
360 	  you'll need to say Y here.
361 
362 	  You can find documentation about IPC with "info ipc" and also in
363 	  section 6.4 of the Linux Programmer's Guide, available from
364 	  <http://www.tldp.org/guides.html>.
365 
366 config SYSVIPC_SYSCTL
367 	bool
368 	depends on SYSVIPC
369 	depends on SYSCTL
370 	default y
371 
372 config POSIX_MQUEUE
373 	bool "POSIX Message Queues"
374 	depends on NET
375 	help
376 	  POSIX variant of message queues is a part of IPC. In POSIX message
377 	  queues every message has a priority which decides about succession
378 	  of receiving it by a process. If you want to compile and run
379 	  programs written e.g. for Solaris with use of its POSIX message
380 	  queues (functions mq_*) say Y here.
381 
382 	  POSIX message queues are visible as a filesystem called 'mqueue'
383 	  and can be mounted somewhere if you want to do filesystem
384 	  operations on message queues.
385 
386 	  If unsure, say Y.
387 
388 config POSIX_MQUEUE_SYSCTL
389 	bool
390 	depends on POSIX_MQUEUE
391 	depends on SYSCTL
392 	default y
393 
394 config WATCH_QUEUE
395 	bool "General notification queue"
396 	default n
397 	help
398 
399 	  This is a general notification queue for the kernel to pass events to
400 	  userspace by splicing them into pipes.  It can be used in conjunction
401 	  with watches for key/keyring change notifications and device
402 	  notifications.
403 
404 	  See Documentation/watch_queue.rst
405 
406 config CROSS_MEMORY_ATTACH
407 	bool "Enable process_vm_readv/writev syscalls"
408 	depends on MMU
409 	default y
410 	help
411 	  Enabling this option adds the system calls process_vm_readv and
412 	  process_vm_writev which allow a process with the correct privileges
413 	  to directly read from or write to another process' address space.
414 	  See the man page for more details.
415 
416 config USELIB
417 	bool "uselib syscall"
418 	def_bool ALPHA || M68K || SPARC || X86_32 || IA32_EMULATION
419 	help
420 	  This option enables the uselib syscall, a system call used in the
421 	  dynamic linker from libc5 and earlier.  glibc does not use this
422 	  system call.  If you intend to run programs built on libc5 or
423 	  earlier, you may need to enable this syscall.  Current systems
424 	  running glibc can safely disable this.
425 
426 config AUDIT
427 	bool "Auditing support"
428 	depends on NET
429 	help
430 	  Enable auditing infrastructure that can be used with another
431 	  kernel subsystem, such as SELinux (which requires this for
432 	  logging of avc messages output).  System call auditing is included
433 	  on architectures which support it.
434 
435 config HAVE_ARCH_AUDITSYSCALL
436 	bool
437 
438 config AUDITSYSCALL
439 	def_bool y
440 	depends on AUDIT && HAVE_ARCH_AUDITSYSCALL
441 	select FSNOTIFY
442 
443 source "kernel/irq/Kconfig"
444 source "kernel/time/Kconfig"
445 source "kernel/Kconfig.preempt"
446 
447 menu "CPU/Task time and stats accounting"
448 
449 config VIRT_CPU_ACCOUNTING
450 	bool
451 
452 choice
453 	prompt "Cputime accounting"
454 	default TICK_CPU_ACCOUNTING if !PPC64
455 	default VIRT_CPU_ACCOUNTING_NATIVE if PPC64
456 
457 # Kind of a stub config for the pure tick based cputime accounting
458 config TICK_CPU_ACCOUNTING
459 	bool "Simple tick based cputime accounting"
460 	depends on !S390 && !NO_HZ_FULL
461 	help
462 	  This is the basic tick based cputime accounting that maintains
463 	  statistics about user, system and idle time spent on per jiffies
464 	  granularity.
465 
466 	  If unsure, say Y.
467 
468 config VIRT_CPU_ACCOUNTING_NATIVE
469 	bool "Deterministic task and CPU time accounting"
470 	depends on HAVE_VIRT_CPU_ACCOUNTING && !NO_HZ_FULL
471 	select VIRT_CPU_ACCOUNTING
472 	help
473 	  Select this option to enable more accurate task and CPU time
474 	  accounting.  This is done by reading a CPU counter on each
475 	  kernel entry and exit and on transitions within the kernel
476 	  between system, softirq and hardirq state, so there is a
477 	  small performance impact.  In the case of s390 or IBM POWER > 5,
478 	  this also enables accounting of stolen time on logically-partitioned
479 	  systems.
480 
481 config VIRT_CPU_ACCOUNTING_GEN
482 	bool "Full dynticks CPU time accounting"
483 	depends on HAVE_CONTEXT_TRACKING
484 	depends on HAVE_VIRT_CPU_ACCOUNTING_GEN
485 	depends on GENERIC_CLOCKEVENTS
486 	select VIRT_CPU_ACCOUNTING
487 	select CONTEXT_TRACKING
488 	help
489 	  Select this option to enable task and CPU time accounting on full
490 	  dynticks systems. This accounting is implemented by watching every
491 	  kernel-user boundaries using the context tracking subsystem.
492 	  The accounting is thus performed at the expense of some significant
493 	  overhead.
494 
495 	  For now this is only useful if you are working on the full
496 	  dynticks subsystem development.
497 
498 	  If unsure, say N.
499 
500 endchoice
501 
502 config IRQ_TIME_ACCOUNTING
503 	bool "Fine granularity task level IRQ time accounting"
504 	depends on HAVE_IRQ_TIME_ACCOUNTING && !VIRT_CPU_ACCOUNTING_NATIVE
505 	help
506 	  Select this option to enable fine granularity task irq time
507 	  accounting. This is done by reading a timestamp on each
508 	  transitions between softirq and hardirq state, so there can be a
509 	  small performance impact.
510 
511 	  If in doubt, say N here.
512 
513 config HAVE_SCHED_AVG_IRQ
514 	def_bool y
515 	depends on IRQ_TIME_ACCOUNTING || PARAVIRT_TIME_ACCOUNTING
516 	depends on SMP
517 
518 config SCHED_THERMAL_PRESSURE
519 	bool
520 	default y if ARM && ARM_CPU_TOPOLOGY
521 	default y if ARM64
522 	depends on SMP
523 	depends on CPU_FREQ_THERMAL
524 	help
525 	  Select this option to enable thermal pressure accounting in the
526 	  scheduler. Thermal pressure is the value conveyed to the scheduler
527 	  that reflects the reduction in CPU compute capacity resulted from
528 	  thermal throttling. Thermal throttling occurs when the performance of
529 	  a CPU is capped due to high operating temperatures.
530 
531 	  If selected, the scheduler will be able to balance tasks accordingly,
532 	  i.e. put less load on throttled CPUs than on non/less throttled ones.
533 
534 	  This requires the architecture to implement
535 	  arch_set_thermal_pressure() and arch_scale_thermal_pressure().
536 
537 config BSD_PROCESS_ACCT
538 	bool "BSD Process Accounting"
539 	depends on MULTIUSER
540 	help
541 	  If you say Y here, a user level program will be able to instruct the
542 	  kernel (via a special system call) to write process accounting
543 	  information to a file: whenever a process exits, information about
544 	  that process will be appended to the file by the kernel.  The
545 	  information includes things such as creation time, owning user,
546 	  command name, memory usage, controlling terminal etc. (the complete
547 	  list is in the struct acct in <file:include/linux/acct.h>).  It is
548 	  up to the user level program to do useful things with this
549 	  information.  This is generally a good idea, so say Y.
550 
551 config BSD_PROCESS_ACCT_V3
552 	bool "BSD Process Accounting version 3 file format"
553 	depends on BSD_PROCESS_ACCT
554 	default n
555 	help
556 	  If you say Y here, the process accounting information is written
557 	  in a new file format that also logs the process IDs of each
558 	  process and its parent. Note that this file format is incompatible
559 	  with previous v0/v1/v2 file formats, so you will need updated tools
560 	  for processing it. A preliminary version of these tools is available
561 	  at <http://www.gnu.org/software/acct/>.
562 
563 config TASKSTATS
564 	bool "Export task/process statistics through netlink"
565 	depends on NET
566 	depends on MULTIUSER
567 	default n
568 	help
569 	  Export selected statistics for tasks/processes through the
570 	  generic netlink interface. Unlike BSD process accounting, the
571 	  statistics are available during the lifetime of tasks/processes as
572 	  responses to commands. Like BSD accounting, they are sent to user
573 	  space on task exit.
574 
575 	  Say N if unsure.
576 
577 config TASK_DELAY_ACCT
578 	bool "Enable per-task delay accounting"
579 	depends on TASKSTATS
580 	select SCHED_INFO
581 	help
582 	  Collect information on time spent by a task waiting for system
583 	  resources like cpu, synchronous block I/O completion and swapping
584 	  in pages. Such statistics can help in setting a task's priorities
585 	  relative to other tasks for cpu, io, rss limits etc.
586 
587 	  Say N if unsure.
588 
589 config TASK_XACCT
590 	bool "Enable extended accounting over taskstats"
591 	depends on TASKSTATS
592 	help
593 	  Collect extended task accounting data and send the data
594 	  to userland for processing over the taskstats interface.
595 
596 	  Say N if unsure.
597 
598 config TASK_IO_ACCOUNTING
599 	bool "Enable per-task storage I/O accounting"
600 	depends on TASK_XACCT
601 	help
602 	  Collect information on the number of bytes of storage I/O which this
603 	  task has caused.
604 
605 	  Say N if unsure.
606 
607 config PSI
608 	bool "Pressure stall information tracking"
609 	help
610 	  Collect metrics that indicate how overcommitted the CPU, memory,
611 	  and IO capacity are in the system.
612 
613 	  If you say Y here, the kernel will create /proc/pressure/ with the
614 	  pressure statistics files cpu, memory, and io. These will indicate
615 	  the share of walltime in which some or all tasks in the system are
616 	  delayed due to contention of the respective resource.
617 
618 	  In kernels with cgroup support, cgroups (cgroup2 only) will
619 	  have cpu.pressure, memory.pressure, and io.pressure files,
620 	  which aggregate pressure stalls for the grouped tasks only.
621 
622 	  For more details see Documentation/accounting/psi.rst.
623 
624 	  Say N if unsure.
625 
626 config PSI_DEFAULT_DISABLED
627 	bool "Require boot parameter to enable pressure stall information tracking"
628 	default n
629 	depends on PSI
630 	help
631 	  If set, pressure stall information tracking will be disabled
632 	  per default but can be enabled through passing psi=1 on the
633 	  kernel commandline during boot.
634 
635 	  This feature adds some code to the task wakeup and sleep
636 	  paths of the scheduler. The overhead is too low to affect
637 	  common scheduling-intense workloads in practice (such as
638 	  webservers, memcache), but it does show up in artificial
639 	  scheduler stress tests, such as hackbench.
640 
641 	  If you are paranoid and not sure what the kernel will be
642 	  used for, say Y.
643 
644 	  Say N if unsure.
645 
646 endmenu # "CPU/Task time and stats accounting"
647 
648 config CPU_ISOLATION
649 	bool "CPU isolation"
650 	depends on SMP || COMPILE_TEST
651 	default y
652 	help
653 	  Make sure that CPUs running critical tasks are not disturbed by
654 	  any source of "noise" such as unbound workqueues, timers, kthreads...
655 	  Unbound jobs get offloaded to housekeeping CPUs. This is driven by
656 	  the "isolcpus=" boot parameter.
657 
658 	  Say Y if unsure.
659 
660 source "kernel/rcu/Kconfig"
661 
662 config BUILD_BIN2C
663 	bool
664 	default n
665 
666 config IKCONFIG
667 	tristate "Kernel .config support"
668 	help
669 	  This option enables the complete Linux kernel ".config" file
670 	  contents to be saved in the kernel. It provides documentation
671 	  of which kernel options are used in a running kernel or in an
672 	  on-disk kernel.  This information can be extracted from the kernel
673 	  image file with the script scripts/extract-ikconfig and used as
674 	  input to rebuild the current kernel or to build another kernel.
675 	  It can also be extracted from a running kernel by reading
676 	  /proc/config.gz if enabled (below).
677 
678 config IKCONFIG_PROC
679 	bool "Enable access to .config through /proc/config.gz"
680 	depends on IKCONFIG && PROC_FS
681 	help
682 	  This option enables access to the kernel configuration file
683 	  through /proc/config.gz.
684 
685 config IKHEADERS
686 	tristate "Enable kernel headers through /sys/kernel/kheaders.tar.xz"
687 	depends on SYSFS
688 	help
689 	  This option enables access to the in-kernel headers that are generated during
690 	  the build process. These can be used to build eBPF tracing programs,
691 	  or similar programs.  If you build the headers as a module, a module called
692 	  kheaders.ko is built which can be loaded on-demand to get access to headers.
693 
694 config LOG_BUF_SHIFT
695 	int "Kernel log buffer size (16 => 64KB, 17 => 128KB)"
696 	range 12 25 if !H8300
697 	range 12 19 if H8300
698 	default 17
699 	depends on PRINTK
700 	help
701 	  Select the minimal kernel log buffer size as a power of 2.
702 	  The final size is affected by LOG_CPU_MAX_BUF_SHIFT config
703 	  parameter, see below. Any higher size also might be forced
704 	  by "log_buf_len" boot parameter.
705 
706 	  Examples:
707 		     17 => 128 KB
708 		     16 => 64 KB
709 		     15 => 32 KB
710 		     14 => 16 KB
711 		     13 =>  8 KB
712 		     12 =>  4 KB
713 
714 config LOG_CPU_MAX_BUF_SHIFT
715 	int "CPU kernel log buffer size contribution (13 => 8 KB, 17 => 128KB)"
716 	depends on SMP
717 	range 0 21
718 	default 12 if !BASE_SMALL
719 	default 0 if BASE_SMALL
720 	depends on PRINTK
721 	help
722 	  This option allows to increase the default ring buffer size
723 	  according to the number of CPUs. The value defines the contribution
724 	  of each CPU as a power of 2. The used space is typically only few
725 	  lines however it might be much more when problems are reported,
726 	  e.g. backtraces.
727 
728 	  The increased size means that a new buffer has to be allocated and
729 	  the original static one is unused. It makes sense only on systems
730 	  with more CPUs. Therefore this value is used only when the sum of
731 	  contributions is greater than the half of the default kernel ring
732 	  buffer as defined by LOG_BUF_SHIFT. The default values are set
733 	  so that more than 16 CPUs are needed to trigger the allocation.
734 
735 	  Also this option is ignored when "log_buf_len" kernel parameter is
736 	  used as it forces an exact (power of two) size of the ring buffer.
737 
738 	  The number of possible CPUs is used for this computation ignoring
739 	  hotplugging making the computation optimal for the worst case
740 	  scenario while allowing a simple algorithm to be used from bootup.
741 
742 	  Examples shift values and their meaning:
743 		     17 => 128 KB for each CPU
744 		     16 =>  64 KB for each CPU
745 		     15 =>  32 KB for each CPU
746 		     14 =>  16 KB for each CPU
747 		     13 =>   8 KB for each CPU
748 		     12 =>   4 KB for each CPU
749 
750 config PRINTK_SAFE_LOG_BUF_SHIFT
751 	int "Temporary per-CPU printk log buffer size (12 => 4KB, 13 => 8KB)"
752 	range 10 21
753 	default 13
754 	depends on PRINTK
755 	help
756 	  Select the size of an alternate printk per-CPU buffer where messages
757 	  printed from usafe contexts are temporary stored. One example would
758 	  be NMI messages, another one - printk recursion. The messages are
759 	  copied to the main log buffer in a safe context to avoid a deadlock.
760 	  The value defines the size as a power of 2.
761 
762 	  Those messages are rare and limited. The largest one is when
763 	  a backtrace is printed. It usually fits into 4KB. Select
764 	  8KB if you want to be on the safe side.
765 
766 	  Examples:
767 		     17 => 128 KB for each CPU
768 		     16 =>  64 KB for each CPU
769 		     15 =>  32 KB for each CPU
770 		     14 =>  16 KB for each CPU
771 		     13 =>   8 KB for each CPU
772 		     12 =>   4 KB for each CPU
773 
774 #
775 # Architectures with an unreliable sched_clock() should select this:
776 #
777 config HAVE_UNSTABLE_SCHED_CLOCK
778 	bool
779 
780 config GENERIC_SCHED_CLOCK
781 	bool
782 
783 menu "Scheduler features"
784 
785 config UCLAMP_TASK
786 	bool "Enable utilization clamping for RT/FAIR tasks"
787 	depends on CPU_FREQ_GOV_SCHEDUTIL
788 	help
789 	  This feature enables the scheduler to track the clamped utilization
790 	  of each CPU based on RUNNABLE tasks scheduled on that CPU.
791 
792 	  With this option, the user can specify the min and max CPU
793 	  utilization allowed for RUNNABLE tasks. The max utilization defines
794 	  the maximum frequency a task should use while the min utilization
795 	  defines the minimum frequency it should use.
796 
797 	  Both min and max utilization clamp values are hints to the scheduler,
798 	  aiming at improving its frequency selection policy, but they do not
799 	  enforce or grant any specific bandwidth for tasks.
800 
801 	  If in doubt, say N.
802 
803 config UCLAMP_BUCKETS_COUNT
804 	int "Number of supported utilization clamp buckets"
805 	range 5 20
806 	default 5
807 	depends on UCLAMP_TASK
808 	help
809 	  Defines the number of clamp buckets to use. The range of each bucket
810 	  will be SCHED_CAPACITY_SCALE/UCLAMP_BUCKETS_COUNT. The higher the
811 	  number of clamp buckets the finer their granularity and the higher
812 	  the precision of clamping aggregation and tracking at run-time.
813 
814 	  For example, with the minimum configuration value we will have 5
815 	  clamp buckets tracking 20% utilization each. A 25% boosted tasks will
816 	  be refcounted in the [20..39]% bucket and will set the bucket clamp
817 	  effective value to 25%.
818 	  If a second 30% boosted task should be co-scheduled on the same CPU,
819 	  that task will be refcounted in the same bucket of the first task and
820 	  it will boost the bucket clamp effective value to 30%.
821 	  The clamp effective value of a bucket is reset to its nominal value
822 	  (20% in the example above) when there are no more tasks refcounted in
823 	  that bucket.
824 
825 	  An additional boost/capping margin can be added to some tasks. In the
826 	  example above the 25% task will be boosted to 30% until it exits the
827 	  CPU. If that should be considered not acceptable on certain systems,
828 	  it's always possible to reduce the margin by increasing the number of
829 	  clamp buckets to trade off used memory for run-time tracking
830 	  precision.
831 
832 	  If in doubt, use the default value.
833 
834 endmenu
835 
836 #
837 # For architectures that want to enable the support for NUMA-affine scheduler
838 # balancing logic:
839 #
840 config ARCH_SUPPORTS_NUMA_BALANCING
841 	bool
842 
843 #
844 # For architectures that prefer to flush all TLBs after a number of pages
845 # are unmapped instead of sending one IPI per page to flush. The architecture
846 # must provide guarantees on what happens if a clean TLB cache entry is
847 # written after the unmap. Details are in mm/rmap.c near the check for
848 # should_defer_flush. The architecture should also consider if the full flush
849 # and the refill costs are offset by the savings of sending fewer IPIs.
850 config ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
851 	bool
852 
853 config CC_HAS_INT128
854 	def_bool !$(cc-option,$(m64-flag) -D__SIZEOF_INT128__=0) && 64BIT
855 
856 #
857 # For architectures that know their GCC __int128 support is sound
858 #
859 config ARCH_SUPPORTS_INT128
860 	bool
861 
862 # For architectures that (ab)use NUMA to represent different memory regions
863 # all cpu-local but of different latencies, such as SuperH.
864 #
865 config ARCH_WANT_NUMA_VARIABLE_LOCALITY
866 	bool
867 
868 config NUMA_BALANCING
869 	bool "Memory placement aware NUMA scheduler"
870 	depends on ARCH_SUPPORTS_NUMA_BALANCING
871 	depends on !ARCH_WANT_NUMA_VARIABLE_LOCALITY
872 	depends on SMP && NUMA && MIGRATION
873 	help
874 	  This option adds support for automatic NUMA aware memory/task placement.
875 	  The mechanism is quite primitive and is based on migrating memory when
876 	  it has references to the node the task is running on.
877 
878 	  This system will be inactive on UMA systems.
879 
880 config NUMA_BALANCING_DEFAULT_ENABLED
881 	bool "Automatically enable NUMA aware memory/task placement"
882 	default y
883 	depends on NUMA_BALANCING
884 	help
885 	  If set, automatic NUMA balancing will be enabled if running on a NUMA
886 	  machine.
887 
888 menuconfig CGROUPS
889 	bool "Control Group support"
890 	select KERNFS
891 	help
892 	  This option adds support for grouping sets of processes together, for
893 	  use with process control subsystems such as Cpusets, CFS, memory
894 	  controls or device isolation.
895 	  See
896 		- Documentation/scheduler/sched-design-CFS.rst	(CFS)
897 		- Documentation/admin-guide/cgroup-v1/ (features for grouping, isolation
898 					  and resource control)
899 
900 	  Say N if unsure.
901 
902 if CGROUPS
903 
904 config PAGE_COUNTER
905 	bool
906 
907 config MEMCG
908 	bool "Memory controller"
909 	select PAGE_COUNTER
910 	select EVENTFD
911 	help
912 	  Provides control over the memory footprint of tasks in a cgroup.
913 
914 config MEMCG_SWAP
915 	bool
916 	depends on MEMCG && SWAP
917 	default y
918 
919 config MEMCG_KMEM
920 	bool
921 	depends on MEMCG && !SLOB
922 	default y
923 
924 config BLK_CGROUP
925 	bool "IO controller"
926 	depends on BLOCK
927 	default n
928 	help
929 	Generic block IO controller cgroup interface. This is the common
930 	cgroup interface which should be used by various IO controlling
931 	policies.
932 
933 	Currently, CFQ IO scheduler uses it to recognize task groups and
934 	control disk bandwidth allocation (proportional time slice allocation)
935 	to such task groups. It is also used by bio throttling logic in
936 	block layer to implement upper limit in IO rates on a device.
937 
938 	This option only enables generic Block IO controller infrastructure.
939 	One needs to also enable actual IO controlling logic/policy. For
940 	enabling proportional weight division of disk bandwidth in CFQ, set
941 	CONFIG_BFQ_GROUP_IOSCHED=y; for enabling throttling policy, set
942 	CONFIG_BLK_DEV_THROTTLING=y.
943 
944 	See Documentation/admin-guide/cgroup-v1/blkio-controller.rst for more information.
945 
946 config CGROUP_WRITEBACK
947 	bool
948 	depends on MEMCG && BLK_CGROUP
949 	default y
950 
951 menuconfig CGROUP_SCHED
952 	bool "CPU controller"
953 	default n
954 	help
955 	  This feature lets CPU scheduler recognize task groups and control CPU
956 	  bandwidth allocation to such task groups. It uses cgroups to group
957 	  tasks.
958 
959 if CGROUP_SCHED
960 config FAIR_GROUP_SCHED
961 	bool "Group scheduling for SCHED_OTHER"
962 	depends on CGROUP_SCHED
963 	default CGROUP_SCHED
964 
965 config CFS_BANDWIDTH
966 	bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED"
967 	depends on FAIR_GROUP_SCHED
968 	default n
969 	help
970 	  This option allows users to define CPU bandwidth rates (limits) for
971 	  tasks running within the fair group scheduler.  Groups with no limit
972 	  set are considered to be unconstrained and will run with no
973 	  restriction.
974 	  See Documentation/scheduler/sched-bwc.rst for more information.
975 
976 config RT_GROUP_SCHED
977 	bool "Group scheduling for SCHED_RR/FIFO"
978 	depends on CGROUP_SCHED
979 	default n
980 	help
981 	  This feature lets you explicitly allocate real CPU bandwidth
982 	  to task groups. If enabled, it will also make it impossible to
983 	  schedule realtime tasks for non-root users until you allocate
984 	  realtime bandwidth for them.
985 	  See Documentation/scheduler/sched-rt-group.rst for more information.
986 
987 endif #CGROUP_SCHED
988 
989 config UCLAMP_TASK_GROUP
990 	bool "Utilization clamping per group of tasks"
991 	depends on CGROUP_SCHED
992 	depends on UCLAMP_TASK
993 	default n
994 	help
995 	  This feature enables the scheduler to track the clamped utilization
996 	  of each CPU based on RUNNABLE tasks currently scheduled on that CPU.
997 
998 	  When this option is enabled, the user can specify a min and max
999 	  CPU bandwidth which is allowed for each single task in a group.
1000 	  The max bandwidth allows to clamp the maximum frequency a task
1001 	  can use, while the min bandwidth allows to define a minimum
1002 	  frequency a task will always use.
1003 
1004 	  When task group based utilization clamping is enabled, an eventually
1005 	  specified task-specific clamp value is constrained by the cgroup
1006 	  specified clamp value. Both minimum and maximum task clamping cannot
1007 	  be bigger than the corresponding clamping defined at task group level.
1008 
1009 	  If in doubt, say N.
1010 
1011 config CGROUP_PIDS
1012 	bool "PIDs controller"
1013 	help
1014 	  Provides enforcement of process number limits in the scope of a
1015 	  cgroup. Any attempt to fork more processes than is allowed in the
1016 	  cgroup will fail. PIDs are fundamentally a global resource because it
1017 	  is fairly trivial to reach PID exhaustion before you reach even a
1018 	  conservative kmemcg limit. As a result, it is possible to grind a
1019 	  system to halt without being limited by other cgroup policies. The
1020 	  PIDs controller is designed to stop this from happening.
1021 
1022 	  It should be noted that organisational operations (such as attaching
1023 	  to a cgroup hierarchy) will *not* be blocked by the PIDs controller,
1024 	  since the PIDs limit only affects a process's ability to fork, not to
1025 	  attach to a cgroup.
1026 
1027 config CGROUP_RDMA
1028 	bool "RDMA controller"
1029 	help
1030 	  Provides enforcement of RDMA resources defined by IB stack.
1031 	  It is fairly easy for consumers to exhaust RDMA resources, which
1032 	  can result into resource unavailability to other consumers.
1033 	  RDMA controller is designed to stop this from happening.
1034 	  Attaching processes with active RDMA resources to the cgroup
1035 	  hierarchy is allowed even if can cross the hierarchy's limit.
1036 
1037 config CGROUP_FREEZER
1038 	bool "Freezer controller"
1039 	help
1040 	  Provides a way to freeze and unfreeze all tasks in a
1041 	  cgroup.
1042 
1043 	  This option affects the ORIGINAL cgroup interface. The cgroup2 memory
1044 	  controller includes important in-kernel memory consumers per default.
1045 
1046 	  If you're using cgroup2, say N.
1047 
1048 config CGROUP_HUGETLB
1049 	bool "HugeTLB controller"
1050 	depends on HUGETLB_PAGE
1051 	select PAGE_COUNTER
1052 	default n
1053 	help
1054 	  Provides a cgroup controller for HugeTLB pages.
1055 	  When you enable this, you can put a per cgroup limit on HugeTLB usage.
1056 	  The limit is enforced during page fault. Since HugeTLB doesn't
1057 	  support page reclaim, enforcing the limit at page fault time implies
1058 	  that, the application will get SIGBUS signal if it tries to access
1059 	  HugeTLB pages beyond its limit. This requires the application to know
1060 	  beforehand how much HugeTLB pages it would require for its use. The
1061 	  control group is tracked in the third page lru pointer. This means
1062 	  that we cannot use the controller with huge page less than 3 pages.
1063 
1064 config CPUSETS
1065 	bool "Cpuset controller"
1066 	depends on SMP
1067 	help
1068 	  This option will let you create and manage CPUSETs which
1069 	  allow dynamically partitioning a system into sets of CPUs and
1070 	  Memory Nodes and assigning tasks to run only within those sets.
1071 	  This is primarily useful on large SMP or NUMA systems.
1072 
1073 	  Say N if unsure.
1074 
1075 config PROC_PID_CPUSET
1076 	bool "Include legacy /proc/<pid>/cpuset file"
1077 	depends on CPUSETS
1078 	default y
1079 
1080 config CGROUP_DEVICE
1081 	bool "Device controller"
1082 	help
1083 	  Provides a cgroup controller implementing whitelists for
1084 	  devices which a process in the cgroup can mknod or open.
1085 
1086 config CGROUP_CPUACCT
1087 	bool "Simple CPU accounting controller"
1088 	help
1089 	  Provides a simple controller for monitoring the
1090 	  total CPU consumed by the tasks in a cgroup.
1091 
1092 config CGROUP_PERF
1093 	bool "Perf controller"
1094 	depends on PERF_EVENTS
1095 	help
1096 	  This option extends the perf per-cpu mode to restrict monitoring
1097 	  to threads which belong to the cgroup specified and run on the
1098 	  designated cpu.  Or this can be used to have cgroup ID in samples
1099 	  so that it can monitor performance events among cgroups.
1100 
1101 	  Say N if unsure.
1102 
1103 config CGROUP_BPF
1104 	bool "Support for eBPF programs attached to cgroups"
1105 	depends on BPF_SYSCALL
1106 	select SOCK_CGROUP_DATA
1107 	help
1108 	  Allow attaching eBPF programs to a cgroup using the bpf(2)
1109 	  syscall command BPF_PROG_ATTACH.
1110 
1111 	  In which context these programs are accessed depends on the type
1112 	  of attachment. For instance, programs that are attached using
1113 	  BPF_CGROUP_INET_INGRESS will be executed on the ingress path of
1114 	  inet sockets.
1115 
1116 config CGROUP_MISC
1117 	bool "Misc resource controller"
1118 	default n
1119 	help
1120 	  Provides a controller for miscellaneous resources on a host.
1121 
1122 	  Miscellaneous scalar resources are the resources on the host system
1123 	  which cannot be abstracted like the other cgroups. This controller
1124 	  tracks and limits the miscellaneous resources used by a process
1125 	  attached to a cgroup hierarchy.
1126 
1127 	  For more information, please check misc cgroup section in
1128 	  /Documentation/admin-guide/cgroup-v2.rst.
1129 
1130 config CGROUP_DEBUG
1131 	bool "Debug controller"
1132 	default n
1133 	depends on DEBUG_KERNEL
1134 	help
1135 	  This option enables a simple controller that exports
1136 	  debugging information about the cgroups framework. This
1137 	  controller is for control cgroup debugging only. Its
1138 	  interfaces are not stable.
1139 
1140 	  Say N.
1141 
1142 config SOCK_CGROUP_DATA
1143 	bool
1144 	default n
1145 
1146 endif # CGROUPS
1147 
1148 menuconfig NAMESPACES
1149 	bool "Namespaces support" if EXPERT
1150 	depends on MULTIUSER
1151 	default !EXPERT
1152 	help
1153 	  Provides the way to make tasks work with different objects using
1154 	  the same id. For example same IPC id may refer to different objects
1155 	  or same user id or pid may refer to different tasks when used in
1156 	  different namespaces.
1157 
1158 if NAMESPACES
1159 
1160 config UTS_NS
1161 	bool "UTS namespace"
1162 	default y
1163 	help
1164 	  In this namespace tasks see different info provided with the
1165 	  uname() system call
1166 
1167 config TIME_NS
1168 	bool "TIME namespace"
1169 	depends on GENERIC_VDSO_TIME_NS
1170 	default y
1171 	help
1172 	  In this namespace boottime and monotonic clocks can be set.
1173 	  The time will keep going with the same pace.
1174 
1175 config IPC_NS
1176 	bool "IPC namespace"
1177 	depends on (SYSVIPC || POSIX_MQUEUE)
1178 	default y
1179 	help
1180 	  In this namespace tasks work with IPC ids which correspond to
1181 	  different IPC objects in different namespaces.
1182 
1183 config USER_NS
1184 	bool "User namespace"
1185 	default n
1186 	help
1187 	  This allows containers, i.e. vservers, to use user namespaces
1188 	  to provide different user info for different servers.
1189 
1190 	  When user namespaces are enabled in the kernel it is
1191 	  recommended that the MEMCG option also be enabled and that
1192 	  user-space use the memory control groups to limit the amount
1193 	  of memory a memory unprivileged users can use.
1194 
1195 	  If unsure, say N.
1196 
1197 config PID_NS
1198 	bool "PID Namespaces"
1199 	default y
1200 	help
1201 	  Support process id namespaces.  This allows having multiple
1202 	  processes with the same pid as long as they are in different
1203 	  pid namespaces.  This is a building block of containers.
1204 
1205 config NET_NS
1206 	bool "Network namespace"
1207 	depends on NET
1208 	default y
1209 	help
1210 	  Allow user space to create what appear to be multiple instances
1211 	  of the network stack.
1212 
1213 endif # NAMESPACES
1214 
1215 config CHECKPOINT_RESTORE
1216 	bool "Checkpoint/restore support"
1217 	select PROC_CHILDREN
1218 	select KCMP
1219 	default n
1220 	help
1221 	  Enables additional kernel features in a sake of checkpoint/restore.
1222 	  In particular it adds auxiliary prctl codes to setup process text,
1223 	  data and heap segment sizes, and a few additional /proc filesystem
1224 	  entries.
1225 
1226 	  If unsure, say N here.
1227 
1228 config SCHED_AUTOGROUP
1229 	bool "Automatic process group scheduling"
1230 	select CGROUPS
1231 	select CGROUP_SCHED
1232 	select FAIR_GROUP_SCHED
1233 	help
1234 	  This option optimizes the scheduler for common desktop workloads by
1235 	  automatically creating and populating task groups.  This separation
1236 	  of workloads isolates aggressive CPU burners (like build jobs) from
1237 	  desktop applications.  Task group autogeneration is currently based
1238 	  upon task session.
1239 
1240 config SYSFS_DEPRECATED
1241 	bool "Enable deprecated sysfs features to support old userspace tools"
1242 	depends on SYSFS
1243 	default n
1244 	help
1245 	  This option adds code that switches the layout of the "block" class
1246 	  devices, to not show up in /sys/class/block/, but only in
1247 	  /sys/block/.
1248 
1249 	  This switch is only active when the sysfs.deprecated=1 boot option is
1250 	  passed or the SYSFS_DEPRECATED_V2 option is set.
1251 
1252 	  This option allows new kernels to run on old distributions and tools,
1253 	  which might get confused by /sys/class/block/. Since 2007/2008 all
1254 	  major distributions and tools handle this just fine.
1255 
1256 	  Recent distributions and userspace tools after 2009/2010 depend on
1257 	  the existence of /sys/class/block/, and will not work with this
1258 	  option enabled.
1259 
1260 	  Only if you are using a new kernel on an old distribution, you might
1261 	  need to say Y here.
1262 
1263 config SYSFS_DEPRECATED_V2
1264 	bool "Enable deprecated sysfs features by default"
1265 	default n
1266 	depends on SYSFS
1267 	depends on SYSFS_DEPRECATED
1268 	help
1269 	  Enable deprecated sysfs by default.
1270 
1271 	  See the CONFIG_SYSFS_DEPRECATED option for more details about this
1272 	  option.
1273 
1274 	  Only if you are using a new kernel on an old distribution, you might
1275 	  need to say Y here. Even then, odds are you would not need it
1276 	  enabled, you can always pass the boot option if absolutely necessary.
1277 
1278 config RELAY
1279 	bool "Kernel->user space relay support (formerly relayfs)"
1280 	select IRQ_WORK
1281 	help
1282 	  This option enables support for relay interface support in
1283 	  certain file systems (such as debugfs).
1284 	  It is designed to provide an efficient mechanism for tools and
1285 	  facilities to relay large amounts of data from kernel space to
1286 	  user space.
1287 
1288 	  If unsure, say N.
1289 
1290 config BLK_DEV_INITRD
1291 	bool "Initial RAM filesystem and RAM disk (initramfs/initrd) support"
1292 	help
1293 	  The initial RAM filesystem is a ramfs which is loaded by the
1294 	  boot loader (loadlin or lilo) and that is mounted as root
1295 	  before the normal boot procedure. It is typically used to
1296 	  load modules needed to mount the "real" root file system,
1297 	  etc. See <file:Documentation/admin-guide/initrd.rst> for details.
1298 
1299 	  If RAM disk support (BLK_DEV_RAM) is also included, this
1300 	  also enables initial RAM disk (initrd) support and adds
1301 	  15 Kbytes (more on some other architectures) to the kernel size.
1302 
1303 	  If unsure say Y.
1304 
1305 if BLK_DEV_INITRD
1306 
1307 source "usr/Kconfig"
1308 
1309 endif
1310 
1311 config BOOT_CONFIG
1312 	bool "Boot config support"
1313 	select BLK_DEV_INITRD
1314 	help
1315 	  Extra boot config allows system admin to pass a config file as
1316 	  complemental extension of kernel cmdline when booting.
1317 	  The boot config file must be attached at the end of initramfs
1318 	  with checksum, size and magic word.
1319 	  See <file:Documentation/admin-guide/bootconfig.rst> for details.
1320 
1321 	  If unsure, say Y.
1322 
1323 choice
1324 	prompt "Compiler optimization level"
1325 	default CC_OPTIMIZE_FOR_PERFORMANCE
1326 
1327 config CC_OPTIMIZE_FOR_PERFORMANCE
1328 	bool "Optimize for performance (-O2)"
1329 	help
1330 	  This is the default optimization level for the kernel, building
1331 	  with the "-O2" compiler flag for best performance and most
1332 	  helpful compile-time warnings.
1333 
1334 config CC_OPTIMIZE_FOR_PERFORMANCE_O3
1335 	bool "Optimize more for performance (-O3)"
1336 	depends on ARC
1337 	help
1338 	  Choosing this option will pass "-O3" to your compiler to optimize
1339 	  the kernel yet more for performance.
1340 
1341 config CC_OPTIMIZE_FOR_SIZE
1342 	bool "Optimize for size (-Os)"
1343 	help
1344 	  Choosing this option will pass "-Os" to your compiler resulting
1345 	  in a smaller kernel.
1346 
1347 endchoice
1348 
1349 config HAVE_LD_DEAD_CODE_DATA_ELIMINATION
1350 	bool
1351 	help
1352 	  This requires that the arch annotates or otherwise protects
1353 	  its external entry points from being discarded. Linker scripts
1354 	  must also merge .text.*, .data.*, and .bss.* correctly into
1355 	  output sections. Care must be taken not to pull in unrelated
1356 	  sections (e.g., '.text.init'). Typically '.' in section names
1357 	  is used to distinguish them from label names / C identifiers.
1358 
1359 config LD_DEAD_CODE_DATA_ELIMINATION
1360 	bool "Dead code and data elimination (EXPERIMENTAL)"
1361 	depends on HAVE_LD_DEAD_CODE_DATA_ELIMINATION
1362 	depends on EXPERT
1363 	depends on $(cc-option,-ffunction-sections -fdata-sections)
1364 	depends on $(ld-option,--gc-sections)
1365 	help
1366 	  Enable this if you want to do dead code and data elimination with
1367 	  the linker by compiling with -ffunction-sections -fdata-sections,
1368 	  and linking with --gc-sections.
1369 
1370 	  This can reduce on disk and in-memory size of the kernel
1371 	  code and static data, particularly for small configs and
1372 	  on small systems. This has the possibility of introducing
1373 	  silently broken kernel if the required annotations are not
1374 	  present. This option is not well tested yet, so use at your
1375 	  own risk.
1376 
1377 config LD_ORPHAN_WARN
1378 	def_bool y
1379 	depends on ARCH_WANT_LD_ORPHAN_WARN
1380 	depends on !LD_IS_LLD || LLD_VERSION >= 110000
1381 	depends on $(ld-option,--orphan-handling=warn)
1382 
1383 config SYSCTL
1384 	bool
1385 
1386 config HAVE_UID16
1387 	bool
1388 
1389 config SYSCTL_EXCEPTION_TRACE
1390 	bool
1391 	help
1392 	  Enable support for /proc/sys/debug/exception-trace.
1393 
1394 config SYSCTL_ARCH_UNALIGN_NO_WARN
1395 	bool
1396 	help
1397 	  Enable support for /proc/sys/kernel/ignore-unaligned-usertrap
1398 	  Allows arch to define/use @no_unaligned_warning to possibly warn
1399 	  about unaligned access emulation going on under the hood.
1400 
1401 config SYSCTL_ARCH_UNALIGN_ALLOW
1402 	bool
1403 	help
1404 	  Enable support for /proc/sys/kernel/unaligned-trap
1405 	  Allows arches to define/use @unaligned_enabled to runtime toggle
1406 	  the unaligned access emulation.
1407 	  see arch/parisc/kernel/unaligned.c for reference
1408 
1409 config HAVE_PCSPKR_PLATFORM
1410 	bool
1411 
1412 # interpreter that classic socket filters depend on
1413 config BPF
1414 	bool
1415 
1416 menuconfig EXPERT
1417 	bool "Configure standard kernel features (expert users)"
1418 	# Unhide debug options, to make the on-by-default options visible
1419 	select DEBUG_KERNEL
1420 	help
1421 	  This option allows certain base kernel options and settings
1422 	  to be disabled or tweaked. This is for specialized
1423 	  environments which can tolerate a "non-standard" kernel.
1424 	  Only use this if you really know what you are doing.
1425 
1426 config UID16
1427 	bool "Enable 16-bit UID system calls" if EXPERT
1428 	depends on HAVE_UID16 && MULTIUSER
1429 	default y
1430 	help
1431 	  This enables the legacy 16-bit UID syscall wrappers.
1432 
1433 config MULTIUSER
1434 	bool "Multiple users, groups and capabilities support" if EXPERT
1435 	default y
1436 	help
1437 	  This option enables support for non-root users, groups and
1438 	  capabilities.
1439 
1440 	  If you say N here, all processes will run with UID 0, GID 0, and all
1441 	  possible capabilities.  Saying N here also compiles out support for
1442 	  system calls related to UIDs, GIDs, and capabilities, such as setuid,
1443 	  setgid, and capset.
1444 
1445 	  If unsure, say Y here.
1446 
1447 config SGETMASK_SYSCALL
1448 	bool "sgetmask/ssetmask syscalls support" if EXPERT
1449 	def_bool PARISC || M68K || PPC || MIPS || X86 || SPARC || MICROBLAZE || SUPERH
1450 	help
1451 	  sys_sgetmask and sys_ssetmask are obsolete system calls
1452 	  no longer supported in libc but still enabled by default in some
1453 	  architectures.
1454 
1455 	  If unsure, leave the default option here.
1456 
1457 config SYSFS_SYSCALL
1458 	bool "Sysfs syscall support" if EXPERT
1459 	default y
1460 	help
1461 	  sys_sysfs is an obsolete system call no longer supported in libc.
1462 	  Note that disabling this option is more secure but might break
1463 	  compatibility with some systems.
1464 
1465 	  If unsure say Y here.
1466 
1467 config FHANDLE
1468 	bool "open by fhandle syscalls" if EXPERT
1469 	select EXPORTFS
1470 	default y
1471 	help
1472 	  If you say Y here, a user level program will be able to map
1473 	  file names to handle and then later use the handle for
1474 	  different file system operations. This is useful in implementing
1475 	  userspace file servers, which now track files using handles instead
1476 	  of names. The handle would remain the same even if file names
1477 	  get renamed. Enables open_by_handle_at(2) and name_to_handle_at(2)
1478 	  syscalls.
1479 
1480 config POSIX_TIMERS
1481 	bool "Posix Clocks & timers" if EXPERT
1482 	default y
1483 	help
1484 	  This includes native support for POSIX timers to the kernel.
1485 	  Some embedded systems have no use for them and therefore they
1486 	  can be configured out to reduce the size of the kernel image.
1487 
1488 	  When this option is disabled, the following syscalls won't be
1489 	  available: timer_create, timer_gettime: timer_getoverrun,
1490 	  timer_settime, timer_delete, clock_adjtime, getitimer,
1491 	  setitimer, alarm. Furthermore, the clock_settime, clock_gettime,
1492 	  clock_getres and clock_nanosleep syscalls will be limited to
1493 	  CLOCK_REALTIME, CLOCK_MONOTONIC and CLOCK_BOOTTIME only.
1494 
1495 	  If unsure say y.
1496 
1497 config PRINTK
1498 	default y
1499 	bool "Enable support for printk" if EXPERT
1500 	select IRQ_WORK
1501 	help
1502 	  This option enables normal printk support. Removing it
1503 	  eliminates most of the message strings from the kernel image
1504 	  and makes the kernel more or less silent. As this makes it
1505 	  very difficult to diagnose system problems, saying N here is
1506 	  strongly discouraged.
1507 
1508 config PRINTK_NMI
1509 	def_bool y
1510 	depends on PRINTK
1511 	depends on HAVE_NMI
1512 
1513 config BUG
1514 	bool "BUG() support" if EXPERT
1515 	default y
1516 	help
1517 	  Disabling this option eliminates support for BUG and WARN, reducing
1518 	  the size of your kernel image and potentially quietly ignoring
1519 	  numerous fatal conditions. You should only consider disabling this
1520 	  option for embedded systems with no facilities for reporting errors.
1521 	  Just say Y.
1522 
1523 config ELF_CORE
1524 	depends on COREDUMP
1525 	default y
1526 	bool "Enable ELF core dumps" if EXPERT
1527 	help
1528 	  Enable support for generating core dumps. Disabling saves about 4k.
1529 
1530 
1531 config PCSPKR_PLATFORM
1532 	bool "Enable PC-Speaker support" if EXPERT
1533 	depends on HAVE_PCSPKR_PLATFORM
1534 	select I8253_LOCK
1535 	default y
1536 	help
1537 	  This option allows to disable the internal PC-Speaker
1538 	  support, saving some memory.
1539 
1540 config BASE_FULL
1541 	default y
1542 	bool "Enable full-sized data structures for core" if EXPERT
1543 	help
1544 	  Disabling this option reduces the size of miscellaneous core
1545 	  kernel data structures. This saves memory on small machines,
1546 	  but may reduce performance.
1547 
1548 config FUTEX
1549 	bool "Enable futex support" if EXPERT
1550 	default y
1551 	imply RT_MUTEXES
1552 	help
1553 	  Disabling this option will cause the kernel to be built without
1554 	  support for "fast userspace mutexes".  The resulting kernel may not
1555 	  run glibc-based applications correctly.
1556 
1557 config FUTEX_PI
1558 	bool
1559 	depends on FUTEX && RT_MUTEXES
1560 	default y
1561 
1562 config HAVE_FUTEX_CMPXCHG
1563 	bool
1564 	depends on FUTEX
1565 	help
1566 	  Architectures should select this if futex_atomic_cmpxchg_inatomic()
1567 	  is implemented and always working. This removes a couple of runtime
1568 	  checks.
1569 
1570 config EPOLL
1571 	bool "Enable eventpoll support" if EXPERT
1572 	default y
1573 	help
1574 	  Disabling this option will cause the kernel to be built without
1575 	  support for epoll family of system calls.
1576 
1577 config SIGNALFD
1578 	bool "Enable signalfd() system call" if EXPERT
1579 	default y
1580 	help
1581 	  Enable the signalfd() system call that allows to receive signals
1582 	  on a file descriptor.
1583 
1584 	  If unsure, say Y.
1585 
1586 config TIMERFD
1587 	bool "Enable timerfd() system call" if EXPERT
1588 	default y
1589 	help
1590 	  Enable the timerfd() system call that allows to receive timer
1591 	  events on a file descriptor.
1592 
1593 	  If unsure, say Y.
1594 
1595 config EVENTFD
1596 	bool "Enable eventfd() system call" if EXPERT
1597 	default y
1598 	help
1599 	  Enable the eventfd() system call that allows to receive both
1600 	  kernel notification (ie. KAIO) or userspace notifications.
1601 
1602 	  If unsure, say Y.
1603 
1604 config SHMEM
1605 	bool "Use full shmem filesystem" if EXPERT
1606 	default y
1607 	depends on MMU
1608 	help
1609 	  The shmem is an internal filesystem used to manage shared memory.
1610 	  It is backed by swap and manages resource limits. It is also exported
1611 	  to userspace as tmpfs if TMPFS is enabled. Disabling this
1612 	  option replaces shmem and tmpfs with the much simpler ramfs code,
1613 	  which may be appropriate on small systems without swap.
1614 
1615 config AIO
1616 	bool "Enable AIO support" if EXPERT
1617 	default y
1618 	help
1619 	  This option enables POSIX asynchronous I/O which may by used
1620 	  by some high performance threaded applications. Disabling
1621 	  this option saves about 7k.
1622 
1623 config IO_URING
1624 	bool "Enable IO uring support" if EXPERT
1625 	select IO_WQ
1626 	default y
1627 	help
1628 	  This option enables support for the io_uring interface, enabling
1629 	  applications to submit and complete IO through submission and
1630 	  completion rings that are shared between the kernel and application.
1631 
1632 config ADVISE_SYSCALLS
1633 	bool "Enable madvise/fadvise syscalls" if EXPERT
1634 	default y
1635 	help
1636 	  This option enables the madvise and fadvise syscalls, used by
1637 	  applications to advise the kernel about their future memory or file
1638 	  usage, improving performance. If building an embedded system where no
1639 	  applications use these syscalls, you can disable this option to save
1640 	  space.
1641 
1642 config HAVE_ARCH_USERFAULTFD_WP
1643 	bool
1644 	help
1645 	  Arch has userfaultfd write protection support
1646 
1647 config HAVE_ARCH_USERFAULTFD_MINOR
1648 	bool
1649 	help
1650 	  Arch has userfaultfd minor fault support
1651 
1652 config MEMBARRIER
1653 	bool "Enable membarrier() system call" if EXPERT
1654 	default y
1655 	help
1656 	  Enable the membarrier() system call that allows issuing memory
1657 	  barriers across all running threads, which can be used to distribute
1658 	  the cost of user-space memory barriers asymmetrically by transforming
1659 	  pairs of memory barriers into pairs consisting of membarrier() and a
1660 	  compiler barrier.
1661 
1662 	  If unsure, say Y.
1663 
1664 config KALLSYMS
1665 	bool "Load all symbols for debugging/ksymoops" if EXPERT
1666 	default y
1667 	help
1668 	  Say Y here to let the kernel print out symbolic crash information and
1669 	  symbolic stack backtraces. This increases the size of the kernel
1670 	  somewhat, as all symbols have to be loaded into the kernel image.
1671 
1672 config KALLSYMS_ALL
1673 	bool "Include all symbols in kallsyms"
1674 	depends on DEBUG_KERNEL && KALLSYMS
1675 	help
1676 	  Normally kallsyms only contains the symbols of functions for nicer
1677 	  OOPS messages and backtraces (i.e., symbols from the text and inittext
1678 	  sections). This is sufficient for most cases. And only in very rare
1679 	  cases (e.g., when a debugger is used) all symbols are required (e.g.,
1680 	  names of variables from the data sections, etc).
1681 
1682 	  This option makes sure that all symbols are loaded into the kernel
1683 	  image (i.e., symbols from all sections) in cost of increased kernel
1684 	  size (depending on the kernel configuration, it may be 300KiB or
1685 	  something like this).
1686 
1687 	  Say N unless you really need all symbols.
1688 
1689 config KALLSYMS_ABSOLUTE_PERCPU
1690 	bool
1691 	depends on KALLSYMS
1692 	default X86_64 && SMP
1693 
1694 config KALLSYMS_BASE_RELATIVE
1695 	bool
1696 	depends on KALLSYMS
1697 	default !IA64
1698 	help
1699 	  Instead of emitting them as absolute values in the native word size,
1700 	  emit the symbol references in the kallsyms table as 32-bit entries,
1701 	  each containing a relative value in the range [base, base + U32_MAX]
1702 	  or, when KALLSYMS_ABSOLUTE_PERCPU is in effect, each containing either
1703 	  an absolute value in the range [0, S32_MAX] or a relative value in the
1704 	  range [base, base + S32_MAX], where base is the lowest relative symbol
1705 	  address encountered in the image.
1706 
1707 	  On 64-bit builds, this reduces the size of the address table by 50%,
1708 	  but more importantly, it results in entries whose values are build
1709 	  time constants, and no relocation pass is required at runtime to fix
1710 	  up the entries based on the runtime load address of the kernel.
1711 
1712 # end of the "standard kernel features (expert users)" menu
1713 
1714 # syscall, maps, verifier
1715 
1716 config BPF_LSM
1717 	bool "LSM Instrumentation with BPF"
1718 	depends on BPF_EVENTS
1719 	depends on BPF_SYSCALL
1720 	depends on SECURITY
1721 	depends on BPF_JIT
1722 	help
1723 	  Enables instrumentation of the security hooks with eBPF programs for
1724 	  implementing dynamic MAC and Audit Policies.
1725 
1726 	  If you are unsure how to answer this question, answer N.
1727 
1728 config BPF_SYSCALL
1729 	bool "Enable bpf() system call"
1730 	select BPF
1731 	select IRQ_WORK
1732 	select TASKS_TRACE_RCU
1733 	select BINARY_PRINTF
1734 	select NET_SOCK_MSG if INET
1735 	default n
1736 	help
1737 	  Enable the bpf() system call that allows to manipulate eBPF
1738 	  programs and maps via file descriptors.
1739 
1740 config ARCH_WANT_DEFAULT_BPF_JIT
1741 	bool
1742 
1743 config BPF_JIT_ALWAYS_ON
1744 	bool "Permanently enable BPF JIT and remove BPF interpreter"
1745 	depends on BPF_SYSCALL && HAVE_EBPF_JIT && BPF_JIT
1746 	help
1747 	  Enables BPF JIT and removes BPF interpreter to avoid
1748 	  speculative execution of BPF instructions by the interpreter
1749 
1750 config BPF_JIT_DEFAULT_ON
1751 	def_bool ARCH_WANT_DEFAULT_BPF_JIT || BPF_JIT_ALWAYS_ON
1752 	depends on HAVE_EBPF_JIT && BPF_JIT
1753 
1754 source "kernel/bpf/preload/Kconfig"
1755 
1756 config USERFAULTFD
1757 	bool "Enable userfaultfd() system call"
1758 	depends on MMU
1759 	help
1760 	  Enable the userfaultfd() system call that allows to intercept and
1761 	  handle page faults in userland.
1762 
1763 config ARCH_HAS_MEMBARRIER_CALLBACKS
1764 	bool
1765 
1766 config ARCH_HAS_MEMBARRIER_SYNC_CORE
1767 	bool
1768 
1769 config KCMP
1770 	bool "Enable kcmp() system call" if EXPERT
1771 	help
1772 	  Enable the kernel resource comparison system call. It provides
1773 	  user-space with the ability to compare two processes to see if they
1774 	  share a common resource, such as a file descriptor or even virtual
1775 	  memory space.
1776 
1777 	  If unsure, say N.
1778 
1779 config RSEQ
1780 	bool "Enable rseq() system call" if EXPERT
1781 	default y
1782 	depends on HAVE_RSEQ
1783 	select MEMBARRIER
1784 	help
1785 	  Enable the restartable sequences system call. It provides a
1786 	  user-space cache for the current CPU number value, which
1787 	  speeds up getting the current CPU number from user-space,
1788 	  as well as an ABI to speed up user-space operations on
1789 	  per-CPU data.
1790 
1791 	  If unsure, say Y.
1792 
1793 config DEBUG_RSEQ
1794 	default n
1795 	bool "Enabled debugging of rseq() system call" if EXPERT
1796 	depends on RSEQ && DEBUG_KERNEL
1797 	help
1798 	  Enable extra debugging checks for the rseq system call.
1799 
1800 	  If unsure, say N.
1801 
1802 config EMBEDDED
1803 	bool "Embedded system"
1804 	select EXPERT
1805 	help
1806 	  This option should be enabled if compiling the kernel for
1807 	  an embedded system so certain expert options are available
1808 	  for configuration.
1809 
1810 config HAVE_PERF_EVENTS
1811 	bool
1812 	help
1813 	  See tools/perf/design.txt for details.
1814 
1815 config PERF_USE_VMALLOC
1816 	bool
1817 	help
1818 	  See tools/perf/design.txt for details
1819 
1820 config PC104
1821 	bool "PC/104 support" if EXPERT
1822 	help
1823 	  Expose PC/104 form factor device drivers and options available for
1824 	  selection and configuration. Enable this option if your target
1825 	  machine has a PC/104 bus.
1826 
1827 menu "Kernel Performance Events And Counters"
1828 
1829 config PERF_EVENTS
1830 	bool "Kernel performance events and counters"
1831 	default y if PROFILING
1832 	depends on HAVE_PERF_EVENTS
1833 	select IRQ_WORK
1834 	select SRCU
1835 	help
1836 	  Enable kernel support for various performance events provided
1837 	  by software and hardware.
1838 
1839 	  Software events are supported either built-in or via the
1840 	  use of generic tracepoints.
1841 
1842 	  Most modern CPUs support performance events via performance
1843 	  counter registers. These registers count the number of certain
1844 	  types of hw events: such as instructions executed, cachemisses
1845 	  suffered, or branches mis-predicted - without slowing down the
1846 	  kernel or applications. These registers can also trigger interrupts
1847 	  when a threshold number of events have passed - and can thus be
1848 	  used to profile the code that runs on that CPU.
1849 
1850 	  The Linux Performance Event subsystem provides an abstraction of
1851 	  these software and hardware event capabilities, available via a
1852 	  system call and used by the "perf" utility in tools/perf/. It
1853 	  provides per task and per CPU counters, and it provides event
1854 	  capabilities on top of those.
1855 
1856 	  Say Y if unsure.
1857 
1858 config DEBUG_PERF_USE_VMALLOC
1859 	default n
1860 	bool "Debug: use vmalloc to back perf mmap() buffers"
1861 	depends on PERF_EVENTS && DEBUG_KERNEL && !PPC
1862 	select PERF_USE_VMALLOC
1863 	help
1864 	  Use vmalloc memory to back perf mmap() buffers.
1865 
1866 	  Mostly useful for debugging the vmalloc code on platforms
1867 	  that don't require it.
1868 
1869 	  Say N if unsure.
1870 
1871 endmenu
1872 
1873 config VM_EVENT_COUNTERS
1874 	default y
1875 	bool "Enable VM event counters for /proc/vmstat" if EXPERT
1876 	help
1877 	  VM event counters are needed for event counts to be shown.
1878 	  This option allows the disabling of the VM event counters
1879 	  on EXPERT systems.  /proc/vmstat will only show page counts
1880 	  if VM event counters are disabled.
1881 
1882 config SLUB_DEBUG
1883 	default y
1884 	bool "Enable SLUB debugging support" if EXPERT
1885 	depends on SLUB && SYSFS
1886 	help
1887 	  SLUB has extensive debug support features. Disabling these can
1888 	  result in significant savings in code size. This also disables
1889 	  SLUB sysfs support. /sys/slab will not exist and there will be
1890 	  no support for cache validation etc.
1891 
1892 config COMPAT_BRK
1893 	bool "Disable heap randomization"
1894 	default y
1895 	help
1896 	  Randomizing heap placement makes heap exploits harder, but it
1897 	  also breaks ancient binaries (including anything libc5 based).
1898 	  This option changes the bootup default to heap randomization
1899 	  disabled, and can be overridden at runtime by setting
1900 	  /proc/sys/kernel/randomize_va_space to 2.
1901 
1902 	  On non-ancient distros (post-2000 ones) N is usually a safe choice.
1903 
1904 choice
1905 	prompt "Choose SLAB allocator"
1906 	default SLUB
1907 	help
1908 	   This option allows to select a slab allocator.
1909 
1910 config SLAB
1911 	bool "SLAB"
1912 	select HAVE_HARDENED_USERCOPY_ALLOCATOR
1913 	help
1914 	  The regular slab allocator that is established and known to work
1915 	  well in all environments. It organizes cache hot objects in
1916 	  per cpu and per node queues.
1917 
1918 config SLUB
1919 	bool "SLUB (Unqueued Allocator)"
1920 	select HAVE_HARDENED_USERCOPY_ALLOCATOR
1921 	help
1922 	   SLUB is a slab allocator that minimizes cache line usage
1923 	   instead of managing queues of cached objects (SLAB approach).
1924 	   Per cpu caching is realized using slabs of objects instead
1925 	   of queues of objects. SLUB can use memory efficiently
1926 	   and has enhanced diagnostics. SLUB is the default choice for
1927 	   a slab allocator.
1928 
1929 config SLOB
1930 	depends on EXPERT
1931 	bool "SLOB (Simple Allocator)"
1932 	help
1933 	   SLOB replaces the stock allocator with a drastically simpler
1934 	   allocator. SLOB is generally more space efficient but
1935 	   does not perform as well on large systems.
1936 
1937 endchoice
1938 
1939 config SLAB_MERGE_DEFAULT
1940 	bool "Allow slab caches to be merged"
1941 	default y
1942 	help
1943 	  For reduced kernel memory fragmentation, slab caches can be
1944 	  merged when they share the same size and other characteristics.
1945 	  This carries a risk of kernel heap overflows being able to
1946 	  overwrite objects from merged caches (and more easily control
1947 	  cache layout), which makes such heap attacks easier to exploit
1948 	  by attackers. By keeping caches unmerged, these kinds of exploits
1949 	  can usually only damage objects in the same cache. To disable
1950 	  merging at runtime, "slab_nomerge" can be passed on the kernel
1951 	  command line.
1952 
1953 config SLAB_FREELIST_RANDOM
1954 	bool "Randomize slab freelist"
1955 	depends on SLAB || SLUB
1956 	help
1957 	  Randomizes the freelist order used on creating new pages. This
1958 	  security feature reduces the predictability of the kernel slab
1959 	  allocator against heap overflows.
1960 
1961 config SLAB_FREELIST_HARDENED
1962 	bool "Harden slab freelist metadata"
1963 	depends on SLAB || SLUB
1964 	help
1965 	  Many kernel heap attacks try to target slab cache metadata and
1966 	  other infrastructure. This options makes minor performance
1967 	  sacrifices to harden the kernel slab allocator against common
1968 	  freelist exploit methods. Some slab implementations have more
1969 	  sanity-checking than others. This option is most effective with
1970 	  CONFIG_SLUB.
1971 
1972 config SHUFFLE_PAGE_ALLOCATOR
1973 	bool "Page allocator randomization"
1974 	default SLAB_FREELIST_RANDOM && ACPI_NUMA
1975 	help
1976 	  Randomization of the page allocator improves the average
1977 	  utilization of a direct-mapped memory-side-cache. See section
1978 	  5.2.27 Heterogeneous Memory Attribute Table (HMAT) in the ACPI
1979 	  6.2a specification for an example of how a platform advertises
1980 	  the presence of a memory-side-cache. There are also incidental
1981 	  security benefits as it reduces the predictability of page
1982 	  allocations to compliment SLAB_FREELIST_RANDOM, but the
1983 	  default granularity of shuffling on the "MAX_ORDER - 1" i.e,
1984 	  10th order of pages is selected based on cache utilization
1985 	  benefits on x86.
1986 
1987 	  While the randomization improves cache utilization it may
1988 	  negatively impact workloads on platforms without a cache. For
1989 	  this reason, by default, the randomization is enabled only
1990 	  after runtime detection of a direct-mapped memory-side-cache.
1991 	  Otherwise, the randomization may be force enabled with the
1992 	  'page_alloc.shuffle' kernel command line parameter.
1993 
1994 	  Say Y if unsure.
1995 
1996 config SLUB_CPU_PARTIAL
1997 	default y
1998 	depends on SLUB && SMP
1999 	bool "SLUB per cpu partial cache"
2000 	help
2001 	  Per cpu partial caches accelerate objects allocation and freeing
2002 	  that is local to a processor at the price of more indeterminism
2003 	  in the latency of the free. On overflow these caches will be cleared
2004 	  which requires the taking of locks that may cause latency spikes.
2005 	  Typically one would choose no for a realtime system.
2006 
2007 config MMAP_ALLOW_UNINITIALIZED
2008 	bool "Allow mmapped anonymous memory to be uninitialized"
2009 	depends on EXPERT && !MMU
2010 	default n
2011 	help
2012 	  Normally, and according to the Linux spec, anonymous memory obtained
2013 	  from mmap() has its contents cleared before it is passed to
2014 	  userspace.  Enabling this config option allows you to request that
2015 	  mmap() skip that if it is given an MAP_UNINITIALIZED flag, thus
2016 	  providing a huge performance boost.  If this option is not enabled,
2017 	  then the flag will be ignored.
2018 
2019 	  This is taken advantage of by uClibc's malloc(), and also by
2020 	  ELF-FDPIC binfmt's brk and stack allocator.
2021 
2022 	  Because of the obvious security issues, this option should only be
2023 	  enabled on embedded devices where you control what is run in
2024 	  userspace.  Since that isn't generally a problem on no-MMU systems,
2025 	  it is normally safe to say Y here.
2026 
2027 	  See Documentation/admin-guide/mm/nommu-mmap.rst for more information.
2028 
2029 config SYSTEM_DATA_VERIFICATION
2030 	def_bool n
2031 	select SYSTEM_TRUSTED_KEYRING
2032 	select KEYS
2033 	select CRYPTO
2034 	select CRYPTO_RSA
2035 	select ASYMMETRIC_KEY_TYPE
2036 	select ASYMMETRIC_PUBLIC_KEY_SUBTYPE
2037 	select ASN1
2038 	select OID_REGISTRY
2039 	select X509_CERTIFICATE_PARSER
2040 	select PKCS7_MESSAGE_PARSER
2041 	help
2042 	  Provide PKCS#7 message verification using the contents of the system
2043 	  trusted keyring to provide public keys.  This then can be used for
2044 	  module verification, kexec image verification and firmware blob
2045 	  verification.
2046 
2047 config PROFILING
2048 	bool "Profiling support"
2049 	help
2050 	  Say Y here to enable the extended profiling support mechanisms used
2051 	  by profilers.
2052 
2053 #
2054 # Place an empty function call at each tracepoint site. Can be
2055 # dynamically changed for a probe function.
2056 #
2057 config TRACEPOINTS
2058 	bool
2059 
2060 endmenu		# General setup
2061 
2062 source "arch/Kconfig"
2063 
2064 config RT_MUTEXES
2065 	bool
2066 
2067 config BASE_SMALL
2068 	int
2069 	default 0 if BASE_FULL
2070 	default 1 if !BASE_FULL
2071 
2072 config MODULE_SIG_FORMAT
2073 	def_bool n
2074 	select SYSTEM_DATA_VERIFICATION
2075 
2076 menuconfig MODULES
2077 	bool "Enable loadable module support"
2078 	modules
2079 	help
2080 	  Kernel modules are small pieces of compiled code which can
2081 	  be inserted in the running kernel, rather than being
2082 	  permanently built into the kernel.  You use the "modprobe"
2083 	  tool to add (and sometimes remove) them.  If you say Y here,
2084 	  many parts of the kernel can be built as modules (by
2085 	  answering M instead of Y where indicated): this is most
2086 	  useful for infrequently used options which are not required
2087 	  for booting.  For more information, see the man pages for
2088 	  modprobe, lsmod, modinfo, insmod and rmmod.
2089 
2090 	  If you say Y here, you will need to run "make
2091 	  modules_install" to put the modules under /lib/modules/
2092 	  where modprobe can find them (you may need to be root to do
2093 	  this).
2094 
2095 	  If unsure, say Y.
2096 
2097 if MODULES
2098 
2099 config MODULE_FORCE_LOAD
2100 	bool "Forced module loading"
2101 	default n
2102 	help
2103 	  Allow loading of modules without version information (ie. modprobe
2104 	  --force).  Forced module loading sets the 'F' (forced) taint flag and
2105 	  is usually a really bad idea.
2106 
2107 config MODULE_UNLOAD
2108 	bool "Module unloading"
2109 	help
2110 	  Without this option you will not be able to unload any
2111 	  modules (note that some modules may not be unloadable
2112 	  anyway), which makes your kernel smaller, faster
2113 	  and simpler.  If unsure, say Y.
2114 
2115 config MODULE_FORCE_UNLOAD
2116 	bool "Forced module unloading"
2117 	depends on MODULE_UNLOAD
2118 	help
2119 	  This option allows you to force a module to unload, even if the
2120 	  kernel believes it is unsafe: the kernel will remove the module
2121 	  without waiting for anyone to stop using it (using the -f option to
2122 	  rmmod).  This is mainly for kernel developers and desperate users.
2123 	  If unsure, say N.
2124 
2125 config MODVERSIONS
2126 	bool "Module versioning support"
2127 	help
2128 	  Usually, you have to use modules compiled with your kernel.
2129 	  Saying Y here makes it sometimes possible to use modules
2130 	  compiled for different kernels, by adding enough information
2131 	  to the modules to (hopefully) spot any changes which would
2132 	  make them incompatible with the kernel you are running.  If
2133 	  unsure, say N.
2134 
2135 config ASM_MODVERSIONS
2136 	bool
2137 	default HAVE_ASM_MODVERSIONS && MODVERSIONS
2138 	help
2139 	  This enables module versioning for exported symbols also from
2140 	  assembly. This can be enabled only when the target architecture
2141 	  supports it.
2142 
2143 config MODULE_REL_CRCS
2144 	bool
2145 	depends on MODVERSIONS
2146 
2147 config MODULE_SRCVERSION_ALL
2148 	bool "Source checksum for all modules"
2149 	help
2150 	  Modules which contain a MODULE_VERSION get an extra "srcversion"
2151 	  field inserted into their modinfo section, which contains a
2152     	  sum of the source files which made it.  This helps maintainers
2153 	  see exactly which source was used to build a module (since
2154 	  others sometimes change the module source without updating
2155 	  the version).  With this option, such a "srcversion" field
2156 	  will be created for all modules.  If unsure, say N.
2157 
2158 config MODULE_SIG
2159 	bool "Module signature verification"
2160 	select MODULE_SIG_FORMAT
2161 	help
2162 	  Check modules for valid signatures upon load: the signature
2163 	  is simply appended to the module. For more information see
2164 	  <file:Documentation/admin-guide/module-signing.rst>.
2165 
2166 	  Note that this option adds the OpenSSL development packages as a
2167 	  kernel build dependency so that the signing tool can use its crypto
2168 	  library.
2169 
2170 	  You should enable this option if you wish to use either
2171 	  CONFIG_SECURITY_LOCKDOWN_LSM or lockdown functionality imposed via
2172 	  another LSM - otherwise unsigned modules will be loadable regardless
2173 	  of the lockdown policy.
2174 
2175 	  !!!WARNING!!!  If you enable this option, you MUST make sure that the
2176 	  module DOES NOT get stripped after being signed.  This includes the
2177 	  debuginfo strip done by some packagers (such as rpmbuild) and
2178 	  inclusion into an initramfs that wants the module size reduced.
2179 
2180 config MODULE_SIG_FORCE
2181 	bool "Require modules to be validly signed"
2182 	depends on MODULE_SIG
2183 	help
2184 	  Reject unsigned modules or signed modules for which we don't have a
2185 	  key.  Without this, such modules will simply taint the kernel.
2186 
2187 config MODULE_SIG_ALL
2188 	bool "Automatically sign all modules"
2189 	default y
2190 	depends on MODULE_SIG || IMA_APPRAISE_MODSIG
2191 	help
2192 	  Sign all modules during make modules_install. Without this option,
2193 	  modules must be signed manually, using the scripts/sign-file tool.
2194 
2195 comment "Do not forget to sign required modules with scripts/sign-file"
2196 	depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL
2197 
2198 choice
2199 	prompt "Which hash algorithm should modules be signed with?"
2200 	depends on MODULE_SIG || IMA_APPRAISE_MODSIG
2201 	help
2202 	  This determines which sort of hashing algorithm will be used during
2203 	  signature generation.  This algorithm _must_ be built into the kernel
2204 	  directly so that signature verification can take place.  It is not
2205 	  possible to load a signed module containing the algorithm to check
2206 	  the signature on that module.
2207 
2208 config MODULE_SIG_SHA1
2209 	bool "Sign modules with SHA-1"
2210 	select CRYPTO_SHA1
2211 
2212 config MODULE_SIG_SHA224
2213 	bool "Sign modules with SHA-224"
2214 	select CRYPTO_SHA256
2215 
2216 config MODULE_SIG_SHA256
2217 	bool "Sign modules with SHA-256"
2218 	select CRYPTO_SHA256
2219 
2220 config MODULE_SIG_SHA384
2221 	bool "Sign modules with SHA-384"
2222 	select CRYPTO_SHA512
2223 
2224 config MODULE_SIG_SHA512
2225 	bool "Sign modules with SHA-512"
2226 	select CRYPTO_SHA512
2227 
2228 endchoice
2229 
2230 config MODULE_SIG_HASH
2231 	string
2232 	depends on MODULE_SIG || IMA_APPRAISE_MODSIG
2233 	default "sha1" if MODULE_SIG_SHA1
2234 	default "sha224" if MODULE_SIG_SHA224
2235 	default "sha256" if MODULE_SIG_SHA256
2236 	default "sha384" if MODULE_SIG_SHA384
2237 	default "sha512" if MODULE_SIG_SHA512
2238 
2239 choice
2240 	prompt "Module compression mode"
2241 	help
2242 	  This option allows you to choose the algorithm which will be used to
2243 	  compress modules when 'make modules_install' is run. (or, you can
2244 	  choose to not compress modules at all.)
2245 
2246 	  External modules will also be compressed in the same way during the
2247 	  installation.
2248 
2249 	  For modules inside an initrd or initramfs, it's more efficient to
2250 	  compress the whole initrd or initramfs instead.
2251 
2252 	  This is fully compatible with signed modules.
2253 
2254 	  Please note that the tool used to load modules needs to support the
2255 	  corresponding algorithm. module-init-tools MAY support gzip, and kmod
2256 	  MAY support gzip, xz and zstd.
2257 
2258 	  Your build system needs to provide the appropriate compression tool
2259 	  to compress the modules.
2260 
2261 	  If in doubt, select 'None'.
2262 
2263 config MODULE_COMPRESS_NONE
2264 	bool "None"
2265 	help
2266 	  Do not compress modules. The installed modules are suffixed
2267 	  with .ko.
2268 
2269 config MODULE_COMPRESS_GZIP
2270 	bool "GZIP"
2271 	help
2272 	  Compress modules with GZIP. The installed modules are suffixed
2273 	  with .ko.gz.
2274 
2275 config MODULE_COMPRESS_XZ
2276 	bool "XZ"
2277 	help
2278 	  Compress modules with XZ. The installed modules are suffixed
2279 	  with .ko.xz.
2280 
2281 config MODULE_COMPRESS_ZSTD
2282 	bool "ZSTD"
2283 	help
2284 	  Compress modules with ZSTD. The installed modules are suffixed
2285 	  with .ko.zst.
2286 
2287 endchoice
2288 
2289 config MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
2290 	bool "Allow loading of modules with missing namespace imports"
2291 	help
2292 	  Symbols exported with EXPORT_SYMBOL_NS*() are considered exported in
2293 	  a namespace. A module that makes use of a symbol exported with such a
2294 	  namespace is required to import the namespace via MODULE_IMPORT_NS().
2295 	  There is no technical reason to enforce correct namespace imports,
2296 	  but it creates consistency between symbols defining namespaces and
2297 	  users importing namespaces they make use of. This option relaxes this
2298 	  requirement and lifts the enforcement when loading a module.
2299 
2300 	  If unsure, say N.
2301 
2302 config MODPROBE_PATH
2303 	string "Path to modprobe binary"
2304 	default "/sbin/modprobe"
2305 	help
2306 	  When kernel code requests a module, it does so by calling
2307 	  the "modprobe" userspace utility. This option allows you to
2308 	  set the path where that binary is found. This can be changed
2309 	  at runtime via the sysctl file
2310 	  /proc/sys/kernel/modprobe. Setting this to the empty string
2311 	  removes the kernel's ability to request modules (but
2312 	  userspace can still load modules explicitly).
2313 
2314 config TRIM_UNUSED_KSYMS
2315 	bool "Trim unused exported kernel symbols" if EXPERT
2316 	depends on !COMPILE_TEST
2317 	help
2318 	  The kernel and some modules make many symbols available for
2319 	  other modules to use via EXPORT_SYMBOL() and variants. Depending
2320 	  on the set of modules being selected in your kernel configuration,
2321 	  many of those exported symbols might never be used.
2322 
2323 	  This option allows for unused exported symbols to be dropped from
2324 	  the build. In turn, this provides the compiler more opportunities
2325 	  (especially when using LTO) for optimizing the code and reducing
2326 	  binary size.  This might have some security advantages as well.
2327 
2328 	  If unsure, or if you need to build out-of-tree modules, say N.
2329 
2330 config UNUSED_KSYMS_WHITELIST
2331 	string "Whitelist of symbols to keep in ksymtab"
2332 	depends on TRIM_UNUSED_KSYMS
2333 	help
2334 	  By default, all unused exported symbols will be un-exported from the
2335 	  build when TRIM_UNUSED_KSYMS is selected.
2336 
2337 	  UNUSED_KSYMS_WHITELIST allows to whitelist symbols that must be kept
2338 	  exported at all times, even in absence of in-tree users. The value to
2339 	  set here is the path to a text file containing the list of symbols,
2340 	  one per line. The path can be absolute, or relative to the kernel
2341 	  source tree.
2342 
2343 endif # MODULES
2344 
2345 config MODULES_TREE_LOOKUP
2346 	def_bool y
2347 	depends on PERF_EVENTS || TRACING || CFI_CLANG
2348 
2349 config INIT_ALL_POSSIBLE
2350 	bool
2351 	help
2352 	  Back when each arch used to define their own cpu_online_mask and
2353 	  cpu_possible_mask, some of them chose to initialize cpu_possible_mask
2354 	  with all 1s, and others with all 0s.  When they were centralised,
2355 	  it was better to provide this option than to break all the archs
2356 	  and have several arch maintainers pursuing me down dark alleys.
2357 
2358 source "block/Kconfig"
2359 
2360 config PREEMPT_NOTIFIERS
2361 	bool
2362 
2363 config PADATA
2364 	depends on SMP
2365 	bool
2366 
2367 config ASN1
2368 	tristate
2369 	help
2370 	  Build a simple ASN.1 grammar compiler that produces a bytecode output
2371 	  that can be interpreted by the ASN.1 stream decoder and used to
2372 	  inform it as to what tags are to be expected in a stream and what
2373 	  functions to call on what tags.
2374 
2375 source "kernel/Kconfig.locks"
2376 
2377 config ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE
2378 	bool
2379 
2380 config ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
2381 	bool
2382 
2383 # It may be useful for an architecture to override the definitions of the
2384 # SYSCALL_DEFINE() and __SYSCALL_DEFINEx() macros in <linux/syscalls.h>
2385 # and the COMPAT_ variants in <linux/compat.h>, in particular to use a
2386 # different calling convention for syscalls. They can also override the
2387 # macros for not-implemented syscalls in kernel/sys_ni.c and
2388 # kernel/time/posix-stubs.c. All these overrides need to be available in
2389 # <asm/syscall_wrapper.h>.
2390 config ARCH_HAS_SYSCALL_WRAPPER
2391 	def_bool n
2392