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