xref: /OK3568_Linux_fs/kernel/init/Kconfig (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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