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