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