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