# SPDX-License-Identifier: GPL-2.0-only
menu "Kernel hacking"

menu "printk and dmesg options"

config PRINTK_TIME
	bool "Show timing information on printks"
	depends on PRINTK
	help
	  Selecting this option causes time stamps of the printk()
	  messages to be added to the output of the syslog() system
	  call and at the console.

	  The timestamp is always recorded internally, and exported
	  to /dev/kmsg. This flag just specifies if the timestamp should
	  be included, not that the timestamp is recorded.

	  The behavior is also controlled by the kernel command line
	  parameter printk.time=1. See Documentation/admin-guide/kernel-parameters.rst

config PRINTK_CALLER
	bool "Show caller information on printks"
	depends on PRINTK
	help
	  Selecting this option causes printk() to add a caller "thread id" (if
	  in task context) or a caller "processor id" (if not in task context)
	  to every message.

	  This option is intended for environments where multiple threads
	  concurrently call printk() for many times, for it is difficult to
	  interpret without knowing where these lines (or sometimes individual
	  line which was divided into multiple lines due to race) came from.

	  Since toggling after boot makes the code racy, currently there is
	  no option to enable/disable at the kernel command line parameter or
	  sysfs interface.

config STACKTRACE_BUILD_ID
	bool "Show build ID information in stacktraces"
	depends on PRINTK
	help
	  Selecting this option adds build ID information for symbols in
	  stacktraces printed with the printk format '%p[SR]b'.

	  This option is intended for distros where debuginfo is not easily
	  accessible but can be downloaded given the build ID of the vmlinux or
	  kernel module where the function is located.

config CONSOLE_LOGLEVEL_DEFAULT
	int "Default console loglevel (1-15)"
	range 1 15
	default "7"
	help
	  Default loglevel to determine what will be printed on the console.

	  Setting a default here is equivalent to passing in loglevel=<x> in
	  the kernel bootargs. loglevel=<x> continues to override whatever
	  value is specified here as well.

	  Note: This does not affect the log level of un-prefixed printk()
	  usage in the kernel. That is controlled by the MESSAGE_LOGLEVEL_DEFAULT
	  option.

config CONSOLE_LOGLEVEL_QUIET
	int "quiet console loglevel (1-15)"
	range 1 15
	default "4"
	help
	  loglevel to use when "quiet" is passed on the kernel commandline.

	  When "quiet" is passed on the kernel commandline this loglevel
	  will be used as the loglevel. IOW passing "quiet" will be the
	  equivalent of passing "loglevel=<CONSOLE_LOGLEVEL_QUIET>"

config MESSAGE_LOGLEVEL_DEFAULT
	int "Default message log level (1-7)"
	range 1 7
	default "4"
	help
	  Default log level for printk statements with no specified priority.

	  This was hard-coded to KERN_WARNING since at least 2.6.10 but folks
	  that are auditing their logs closely may want to set it to a lower
	  priority.

	  Note: This does not affect what message level gets printed on the console
	  by default. To change that, use loglevel=<x> in the kernel bootargs,
	  or pick a different CONSOLE_LOGLEVEL_DEFAULT configuration value.

config BOOT_PRINTK_DELAY
	bool "Delay each boot printk message by N milliseconds"
	depends on DEBUG_KERNEL && PRINTK && GENERIC_CALIBRATE_DELAY
	help
	  This build option allows you to read kernel boot messages
	  by inserting a short delay after each one.  The delay is
	  specified in milliseconds on the kernel command line,
	  using "boot_delay=N".

	  It is likely that you would also need to use "lpj=M" to preset
	  the "loops per jiffie" value.
	  See a previous boot log for the "lpj" value to use for your
	  system, and then set "lpj=M" before setting "boot_delay=N".
	  NOTE:  Using this option may adversely affect SMP systems.
	  I.e., processors other than the first one may not boot up.
	  BOOT_PRINTK_DELAY also may cause LOCKUP_DETECTOR to detect
	  what it believes to be lockup conditions.

config DYNAMIC_DEBUG
	bool "Enable dynamic printk() support"
	default n
	depends on PRINTK
	depends on (DEBUG_FS || PROC_FS)
	select DYNAMIC_DEBUG_CORE
	help

	  Compiles debug level messages into the kernel, which would not
	  otherwise be available at runtime. These messages can then be
	  enabled/disabled based on various levels of scope - per source file,
	  function, module, format string, and line number. This mechanism
	  implicitly compiles in all pr_debug() and dev_dbg() calls, which
	  enlarges the kernel text size by about 2%.

	  If a source file is compiled with DEBUG flag set, any
	  pr_debug() calls in it are enabled by default, but can be
	  disabled at runtime as below.  Note that DEBUG flag is
	  turned on by many CONFIG_*DEBUG* options.

	  Usage:

	  Dynamic debugging is controlled via the 'dynamic_debug/control' file,
	  which is contained in the 'debugfs' filesystem or procfs.
	  Thus, the debugfs or procfs filesystem must first be mounted before
	  making use of this feature.
	  We refer the control file as: <debugfs>/dynamic_debug/control. This
	  file contains a list of the debug statements that can be enabled. The
	  format for each line of the file is:

		filename:lineno [module]function flags format

	  filename : source file of the debug statement
	  lineno : line number of the debug statement
	  module : module that contains the debug statement
	  function : function that contains the debug statement
	  flags : '=p' means the line is turned 'on' for printing
	  format : the format used for the debug statement

	  From a live system:

		nullarbor:~ # cat <debugfs>/dynamic_debug/control
		# filename:lineno [module]function flags format
		fs/aio.c:222 [aio]__put_ioctx =_ "__put_ioctx:\040freeing\040%p\012"
		fs/aio.c:248 [aio]ioctx_alloc =_ "ENOMEM:\040nr_events\040too\040high\012"
		fs/aio.c:1770 [aio]sys_io_cancel =_ "calling\040cancel\012"

	  Example usage:

		// enable the message at line 1603 of file svcsock.c
		nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' >
						<debugfs>/dynamic_debug/control

		// enable all the messages in file svcsock.c
		nullarbor:~ # echo -n 'file svcsock.c +p' >
						<debugfs>/dynamic_debug/control

		// enable all the messages in the NFS server module
		nullarbor:~ # echo -n 'module nfsd +p' >
						<debugfs>/dynamic_debug/control

		// enable all 12 messages in the function svc_process()
		nullarbor:~ # echo -n 'func svc_process +p' >
						<debugfs>/dynamic_debug/control

		// disable all 12 messages in the function svc_process()
		nullarbor:~ # echo -n 'func svc_process -p' >
						<debugfs>/dynamic_debug/control

	  See Documentation/admin-guide/dynamic-debug-howto.rst for additional
	  information.

config DYNAMIC_DEBUG_CORE
	bool "Enable core function of dynamic debug support"
	depends on PRINTK
	depends on (DEBUG_FS || PROC_FS)
	help
	  Enable core functional support of dynamic debug. It is useful
	  when you want to tie dynamic debug to your kernel modules with
	  DYNAMIC_DEBUG_MODULE defined for each of them, especially for
	  the case of embedded system where the kernel image size is
	  sensitive for people.

config SYMBOLIC_ERRNAME
	bool "Support symbolic error names in printf"
	default y if PRINTK
	help
	  If you say Y here, the kernel's printf implementation will
	  be able to print symbolic error names such as ENOSPC instead
	  of the number 28. It makes the kernel image slightly larger
	  (about 3KB), but can make the kernel logs easier to read.

config DEBUG_BUGVERBOSE
	bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EXPERT
	depends on BUG && (GENERIC_BUG || HAVE_DEBUG_BUGVERBOSE)
	default y
	help
	  Say Y here to make BUG() panics output the file name and line number
	  of the BUG call as well as the EIP and oops trace.  This aids
	  debugging but costs about 70-100K of memory.

endmenu # "printk and dmesg options"

config DEBUG_KERNEL
	bool "Kernel debugging"
	help
	  Say Y here if you are developing drivers or trying to debug and
	  identify kernel problems.

config DEBUG_MISC
	bool "Miscellaneous debug code"
	default DEBUG_KERNEL
	depends on DEBUG_KERNEL
	help
	  Say Y here if you need to enable miscellaneous debug code that should
	  be under a more specific debug option but isn't.

menu "Compile-time checks and compiler options"

config DEBUG_INFO
	bool
	help
	  A kernel debug info option other than "None" has been selected
	  in the "Debug information" choice below, indicating that debug
	  information will be generated for build targets.

# Clang is known to generate .{s,u}leb128 with symbol deltas with DWARF5, which
# some targets may not support: https://sourceware.org/bugzilla/show_bug.cgi?id=27215
config AS_HAS_NON_CONST_LEB128
	def_bool $(as-instr,.uleb128 .Lexpr_end4 - .Lexpr_start3\n.Lexpr_start3:\n.Lexpr_end4:)

choice
	prompt "Debug information"
	depends on DEBUG_KERNEL
	help
	  Selecting something other than "None" results in a kernel image
	  that will include debugging info resulting in a larger kernel image.
	  This adds debug symbols to the kernel and modules (gcc -g), and
	  is needed if you intend to use kernel crashdump or binary object
	  tools like crash, kgdb, LKCD, gdb, etc on the kernel.

	  Choose which version of DWARF debug info to emit. If unsure,
	  select "Toolchain default".

config DEBUG_INFO_NONE
	bool "Disable debug information"
	help
	  Do not build the kernel with debugging information, which will
	  result in a faster and smaller build.

config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
	bool "Rely on the toolchain's implicit default DWARF version"
	select DEBUG_INFO
	depends on !CC_IS_CLANG || AS_IS_LLVM || CLANG_VERSION < 140000 || (AS_IS_GNU && AS_VERSION >= 23502 && AS_HAS_NON_CONST_LEB128)
	help
	  The implicit default version of DWARF debug info produced by a
	  toolchain changes over time.

	  This can break consumers of the debug info that haven't upgraded to
	  support newer revisions, and prevent testing newer versions, but
	  those should be less common scenarios.

config DEBUG_INFO_DWARF4
	bool "Generate DWARF Version 4 debuginfo"
	select DEBUG_INFO
	depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502)
	help
	  Generate DWARF v4 debug info. This requires gcc 4.5+, binutils 2.35.2
	  if using clang without clang's integrated assembler, and gdb 7.0+.

	  If you have consumers of DWARF debug info that are not ready for
	  newer revisions of DWARF, you may wish to choose this or have your
	  config select this.

config DEBUG_INFO_DWARF5
	bool "Generate DWARF Version 5 debuginfo"
	select DEBUG_INFO
	depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502 && AS_HAS_NON_CONST_LEB128)
	help
	  Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc
	  5.0+ accepts the -gdwarf-5 flag but only had partial support for some
	  draft features until 7.0), and gdb 8.0+.

	  Changes to the structure of debug info in Version 5 allow for around
	  15-18% savings in resulting image and debug info section sizes as
	  compared to DWARF Version 4. DWARF Version 5 standardizes previous
	  extensions such as accelerators for symbol indexing and the format
	  for fission (.dwo/.dwp) files. Users may not want to select this
	  config if they rely on tooling that has not yet been updated to
	  support DWARF Version 5.

endchoice # "Debug information"

if DEBUG_INFO

config DEBUG_INFO_REDUCED
	bool "Reduce debugging information"
	help
	  If you say Y here gcc is instructed to generate less debugging
	  information for structure types. This means that tools that
	  need full debugging information (like kgdb or systemtap) won't
	  be happy. But if you merely need debugging information to
	  resolve line numbers there is no loss. Advantage is that
	  build directory object sizes shrink dramatically over a full
	  DEBUG_INFO build and compile times are reduced too.
	  Only works with newer gcc versions.

config DEBUG_INFO_COMPRESSED
	bool "Compressed debugging information"
	depends on $(cc-option,-gz=zlib)
	depends on $(ld-option,--compress-debug-sections=zlib)
	help
	  Compress the debug information using zlib.  Requires GCC 5.0+ or Clang
	  5.0+, binutils 2.26+, and zlib.

	  Users of dpkg-deb via scripts/package/builddeb may find an increase in
	  size of their debug .deb packages with this config set, due to the
	  debug info being compressed with zlib, then the object files being
	  recompressed with a different compression scheme. But this is still
	  preferable to setting $KDEB_COMPRESS to "none" which would be even
	  larger.

config DEBUG_INFO_SPLIT
	bool "Produce split debuginfo in .dwo files"
	depends on $(cc-option,-gsplit-dwarf)
	help
	  Generate debug info into separate .dwo files. This significantly
	  reduces the build directory size for builds with DEBUG_INFO,
	  because it stores the information only once on disk in .dwo
	  files instead of multiple times in object files and executables.
	  In addition the debug information is also compressed.

	  Requires recent gcc (4.7+) and recent gdb/binutils.
	  Any tool that packages or reads debug information would need
	  to know about the .dwo files and include them.
	  Incompatible with older versions of ccache.

config DEBUG_INFO_BTF
	bool "Generate BTF typeinfo"
	depends on !DEBUG_INFO_SPLIT && !DEBUG_INFO_REDUCED
	depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST
	depends on BPF_SYSCALL
	depends on !DEBUG_INFO_DWARF5 || PAHOLE_VERSION >= 121
	help
	  Generate deduplicated BTF type information from DWARF debug info.
	  Turning this on expects presence of pahole tool, which will convert
	  DWARF type info into equivalent deduplicated BTF type info.

config PAHOLE_HAS_SPLIT_BTF
	def_bool PAHOLE_VERSION >= 119

config PAHOLE_HAS_BTF_TAG
	def_bool PAHOLE_VERSION >= 123
	depends on CC_IS_CLANG
	help
	  Decide whether pahole emits btf_tag attributes (btf_type_tag and
	  btf_decl_tag) or not. Currently only clang compiler implements
	  these attributes, so make the config depend on CC_IS_CLANG.

config DEBUG_INFO_BTF_MODULES
	def_bool y
	depends on DEBUG_INFO_BTF && MODULES && PAHOLE_HAS_SPLIT_BTF
	help
	  Generate compact split BTF type information for kernel modules.

config MODULE_ALLOW_BTF_MISMATCH
	bool "Allow loading modules with non-matching BTF type info"
	depends on DEBUG_INFO_BTF_MODULES
	help
	  For modules whose split BTF does not match vmlinux, load without
	  BTF rather than refusing to load. The default behavior with
	  module BTF enabled is to reject modules with such mismatches;
	  this option will still load module BTF where possible but ignore
	  it when a mismatch is found.

config GDB_SCRIPTS
	bool "Provide GDB scripts for kernel debugging"
	help
	  This creates the required links to GDB helper scripts in the
	  build directory. If you load vmlinux into gdb, the helper
	  scripts will be automatically imported by gdb as well, and
	  additional functions are available to analyze a Linux kernel
	  instance. See Documentation/dev-tools/gdb-kernel-debugging.rst
	  for further details.

endif # DEBUG_INFO

config FRAME_WARN
	int "Warn for stack frames larger than"
	range 0 8192
	default 2048 if GCC_PLUGIN_LATENT_ENTROPY
	default 2048 if PARISC
	default 1536 if (!64BIT && XTENSA)
	default 1280 if KASAN && !64BIT
	default 1024 if !64BIT
	default 2048 if 64BIT
	help
	  Tell gcc to warn at build time for stack frames larger than this.
	  Setting this too low will cause a lot of warnings.
	  Setting it to 0 disables the warning.

config STRIP_ASM_SYMS
	bool "Strip assembler-generated symbols during link"
	default n
	help
	  Strip internal assembler-generated symbols during a link (symbols
	  that look like '.Lxxx') so they don't pollute the output of
	  get_wchan() and suchlike.

config READABLE_ASM
	bool "Generate readable assembler code"
	depends on DEBUG_KERNEL
	depends on CC_IS_GCC
	help
	  Disable some compiler optimizations that tend to generate human unreadable
	  assembler output. This may make the kernel slightly slower, but it helps
	  to keep kernel developers who have to stare a lot at assembler listings
	  sane.

config HEADERS_INSTALL
	bool "Install uapi headers to usr/include"
	depends on !UML
	help
	  This option will install uapi headers (headers exported to user-space)
	  into the usr/include directory for use during the kernel build.
	  This is unneeded for building the kernel itself, but needed for some
	  user-space program samples. It is also needed by some features such
	  as uapi header sanity checks.

config DEBUG_SECTION_MISMATCH
	bool "Enable full Section mismatch analysis"
	depends on CC_IS_GCC
	help
	  The section mismatch analysis checks if there are illegal
	  references from one section to another section.
	  During linktime or runtime, some sections are dropped;
	  any use of code/data previously in these sections would
	  most likely result in an oops.
	  In the code, functions and variables are annotated with
	  __init,, etc. (see the full list in include/linux/init.h),
	  which results in the code/data being placed in specific sections.
	  The section mismatch analysis is always performed after a full
	  kernel build, and enabling this option causes the following
	  additional step to occur:
	  - Add the option -fno-inline-functions-called-once to gcc commands.
	    When inlining a function annotated with __init in a non-init
	    function, we would lose the section information and thus
	    the analysis would not catch the illegal reference.
	    This option tells gcc to inline less (but it does result in
	    a larger kernel).

config SECTION_MISMATCH_WARN_ONLY
	bool "Make section mismatch errors non-fatal"
	default y
	help
	  If you say N here, the build process will fail if there are any
	  section mismatch, instead of just throwing warnings.

	  If unsure, say Y.

config DEBUG_FORCE_FUNCTION_ALIGN_64B
	bool "Force all function address 64B aligned"
	depends on EXPERT && (X86_64 || ARM64 || PPC32 || PPC64 || ARC)
	help
	  There are cases that a commit from one domain changes the function
	  address alignment of other domains, and cause magic performance
	  bump (regression or improvement). Enable this option will help to
	  verify if the bump is caused by function alignment changes, while
	  it will slightly increase the kernel size and affect icache usage.

	  It is mainly for debug and performance tuning use.

#
# Select this config option from the architecture Kconfig, if it
# is preferred to always offer frame pointers as a config
# option on the architecture (regardless of KERNEL_DEBUG):
#
config ARCH_WANT_FRAME_POINTERS
	bool

config FRAME_POINTER
	bool "Compile the kernel with frame pointers"
	depends on DEBUG_KERNEL && (M68K || UML || SUPERH) || ARCH_WANT_FRAME_POINTERS
	default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS
	help
	  If you say Y here the resulting kernel image will be slightly
	  larger and slower, but it gives very useful debugging information
	  in case of kernel bugs. (precise oopses/stacktraces/warnings)

config OBJTOOL
	bool

config STACK_VALIDATION
	bool "Compile-time stack metadata validation"
	depends on HAVE_STACK_VALIDATION && UNWINDER_FRAME_POINTER
	select OBJTOOL
	default n
	help
	  Validate frame pointer rules at compile-time.  This helps ensure that
	  runtime stack traces are more reliable.

	  For more information, see
	  tools/objtool/Documentation/objtool.txt.

config NOINSTR_VALIDATION
	bool
	depends on HAVE_NOINSTR_VALIDATION && DEBUG_ENTRY
	select OBJTOOL
	default y

config VMLINUX_MAP
	bool "Generate vmlinux.map file when linking"
	depends on EXPERT
	help
	  Selecting this option will pass "-Map=vmlinux.map" to ld
	  when linking vmlinux. That file can be useful for verifying
	  and debugging magic section games, and for seeing which
	  pieces of code get eliminated with
	  CONFIG_LD_DEAD_CODE_DATA_ELIMINATION.

config DEBUG_FORCE_WEAK_PER_CPU
	bool "Force weak per-cpu definitions"
	depends on DEBUG_KERNEL
	help
	  s390 and alpha require percpu variables in modules to be
	  defined weak to work around addressing range issue which
	  puts the following two restrictions on percpu variable
	  definitions.

	  1. percpu symbols must be unique whether static or not
	  2. percpu variables can't be defined inside a function

	  To ensure that generic code follows the above rules, this
	  option forces all percpu variables to be defined as weak.

endmenu # "Compiler options"

menu "Generic Kernel Debugging Instruments"

config MAGIC_SYSRQ
	bool "Magic SysRq key"
	depends on !UML
	help
	  If you say Y here, you will have some control over the system even
	  if the system crashes for example during kernel debugging (e.g., you
	  will be able to flush the buffer cache to disk, reboot the system
	  immediately or dump some status information). This is accomplished
	  by pressing various keys while holding SysRq (Alt+PrintScreen). It
	  also works on a serial console (on PC hardware at least), if you
	  send a BREAK and then within 5 seconds a command keypress. The
	  keys are documented in <file:Documentation/admin-guide/sysrq.rst>.
	  Don't say Y unless you really know what this hack does.

config MAGIC_SYSRQ_DEFAULT_ENABLE
	hex "Enable magic SysRq key functions by default"
	depends on MAGIC_SYSRQ
	default 0x1
	help
	  Specifies which SysRq key functions are enabled by default.
	  This may be set to 1 or 0 to enable or disable them all, or
	  to a bitmask as described in Documentation/admin-guide/sysrq.rst.

config MAGIC_SYSRQ_SERIAL
	bool "Enable magic SysRq key over serial"
	depends on MAGIC_SYSRQ
	default y
	help
	  Many embedded boards have a disconnected TTL level serial which can
	  generate some garbage that can lead to spurious false sysrq detects.
	  This option allows you to decide whether you want to enable the
	  magic SysRq key.

config MAGIC_SYSRQ_SERIAL_SEQUENCE
	string "Char sequence that enables magic SysRq over serial"
	depends on MAGIC_SYSRQ_SERIAL
	default ""
	help
	  Specifies a sequence of characters that can follow BREAK to enable
	  SysRq on a serial console.

	  If unsure, leave an empty string and the option will not be enabled.

config DEBUG_FS
	bool "Debug Filesystem"
	help
	  debugfs is a virtual file system that kernel developers use to put
	  debugging files into.  Enable this option to be able to read and
	  write to these files.

	  For detailed documentation on the debugfs API, see
	  Documentation/filesystems/.

	  If unsure, say N.

choice
	prompt "Debugfs default access"
	depends on DEBUG_FS
	default DEBUG_FS_ALLOW_ALL
	help
	  This selects the default access restrictions for debugfs.
	  It can be overridden with kernel command line option
	  debugfs=[on,no-mount,off]. The restrictions apply for API access
	  and filesystem registration.

config DEBUG_FS_ALLOW_ALL
	bool "Access normal"
	help
	  No restrictions apply. Both API and filesystem registration
	  is on. This is the normal default operation.

config DEBUG_FS_DISALLOW_MOUNT
	bool "Do not register debugfs as filesystem"
	help
	  The API is open but filesystem is not loaded. Clients can still do
	  their work and read with debug tools that do not need
	  debugfs filesystem.

config DEBUG_FS_ALLOW_NONE
	bool "No access"
	help
	  Access is off. Clients get -PERM when trying to create nodes in
	  debugfs tree and debugfs is not registered as a filesystem.
	  Client can then back-off or continue without debugfs access.

endchoice

source "lib/Kconfig.kgdb"
source "lib/Kconfig.ubsan"
source "lib/Kconfig.kcsan"

endmenu

menu "Networking Debugging"

source "net/Kconfig.debug"

endmenu # "Networking Debugging"

menu "Memory Debugging"

source "mm/Kconfig.debug"

config DEBUG_OBJECTS
	bool "Debug object operations"
	depends on DEBUG_KERNEL
	help
	  If you say Y here, additional code will be inserted into the
	  kernel to track the life time of various objects and validate
	  the operations on those objects.

config DEBUG_OBJECTS_SELFTEST
	bool "Debug objects selftest"
	depends on DEBUG_OBJECTS
	help
	  This enables the selftest of the object debug code.

config DEBUG_OBJECTS_FREE
	bool "Debug objects in freed memory"
	depends on DEBUG_OBJECTS
	help
	  This enables checks whether a k/v free operation frees an area
	  which contains an object which has not been deactivated
	  properly. This can make kmalloc/kfree-intensive workloads
	  much slower.

config DEBUG_OBJECTS_TIMERS
	bool "Debug timer objects"
	depends on DEBUG_OBJECTS
	help
	  If you say Y here, additional code will be inserted into the
	  timer routines to track the life time of timer objects and
	  validate the timer operations.

config DEBUG_OBJECTS_WORK
	bool "Debug work objects"
	depends on DEBUG_OBJECTS
	help
	  If you say Y here, additional code will be inserted into the
	  work queue routines to track the life time of work objects and
	  validate the work operations.

config DEBUG_OBJECTS_RCU_HEAD
	bool "Debug RCU callbacks objects"
	depends on DEBUG_OBJECTS
	help
	  Enable this to turn on debugging of RCU list heads (call_rcu() usage).

config DEBUG_OBJECTS_PERCPU_COUNTER
	bool "Debug percpu counter objects"
	depends on DEBUG_OBJECTS
	help
	  If you say Y here, additional code will be inserted into the
	  percpu counter routines to track the life time of percpu counter
	  objects and validate the percpu counter operations.

config DEBUG_OBJECTS_ENABLE_DEFAULT
	int "debug_objects bootup default value (0-1)"
	range 0 1
	default "1"
	depends on DEBUG_OBJECTS
	help
	  Debug objects boot parameter default value

config SHRINKER_DEBUG
	bool "Enable shrinker debugging support"
	depends on DEBUG_FS
	help
	  Say Y to enable the shrinker debugfs interface which provides
	  visibility into the kernel memory shrinkers subsystem.
	  Disable it to avoid an extra memory footprint.

config HAVE_DEBUG_KMEMLEAK
	bool

config DEBUG_KMEMLEAK
	bool "Kernel memory leak detector"
	depends on DEBUG_KERNEL && HAVE_DEBUG_KMEMLEAK
	select DEBUG_FS
	select STACKTRACE if STACKTRACE_SUPPORT
	select KALLSYMS
	select CRC32
	help
	  Say Y here if you want to enable the memory leak
	  detector. The memory allocation/freeing is traced in a way
	  similar to the Boehm's conservative garbage collector, the
	  difference being that the orphan objects are not freed but
	  only shown in /sys/kernel/debug/kmemleak. Enabling this
	  feature will introduce an overhead to memory
	  allocations. See Documentation/dev-tools/kmemleak.rst for more
	  details.

	  Enabling DEBUG_SLAB or SLUB_DEBUG may increase the chances
	  of finding leaks due to the slab objects poisoning.

	  In order to access the kmemleak file, debugfs needs to be
	  mounted (usually at /sys/kernel/debug).

config DEBUG_KMEMLEAK_MEM_POOL_SIZE
	int "Kmemleak memory pool size"
	depends on DEBUG_KMEMLEAK
	range 200 1000000
	default 16000
	help
	  Kmemleak must track all the memory allocations to avoid
	  reporting false positives. Since memory may be allocated or
	  freed before kmemleak is fully initialised, use a static pool
	  of metadata objects to track such callbacks. After kmemleak is
	  fully initialised, this memory pool acts as an emergency one
	  if slab allocations fail.

config DEBUG_KMEMLEAK_TEST
	tristate "Simple test for the kernel memory leak detector"
	depends on DEBUG_KMEMLEAK && m
	help
	  This option enables a module that explicitly leaks memory.

	  If unsure, say N.

config DEBUG_KMEMLEAK_DEFAULT_OFF
	bool "Default kmemleak to off"
	depends on DEBUG_KMEMLEAK
	help
	  Say Y here to disable kmemleak by default. It can then be enabled
	  on the command line via kmemleak=on.

config DEBUG_KMEMLEAK_AUTO_SCAN
	bool "Enable kmemleak auto scan thread on boot up"
	default y
	depends on DEBUG_KMEMLEAK
	help
	  Depending on the cpu, kmemleak scan may be cpu intensive and can
	  stall user tasks at times. This option enables/disables automatic
	  kmemleak scan at boot up.

	  Say N here to disable kmemleak auto scan thread to stop automatic
	  scanning. Disabling this option disables automatic reporting of
	  memory leaks.

	  If unsure, say Y.

config DEBUG_STACK_USAGE
	bool "Stack utilization instrumentation"
	depends on DEBUG_KERNEL && !IA64
	help
	  Enables the display of the minimum amount of free stack which each
	  task has ever had available in the sysrq-T and sysrq-P debug output.

	  This option will slow down process creation somewhat.

config SCHED_STACK_END_CHECK
	bool "Detect stack corruption on calls to schedule()"
	depends on DEBUG_KERNEL
	default n
	help
	  This option checks for a stack overrun on calls to schedule().
	  If the stack end location is found to be over written always panic as
	  the content of the corrupted region can no longer be trusted.
	  This is to ensure no erroneous behaviour occurs which could result in
	  data corruption or a sporadic crash at a later stage once the region
	  is examined. The runtime overhead introduced is minimal.

config ARCH_HAS_DEBUG_VM_PGTABLE
	bool
	help
	  An architecture should select this when it can successfully
	  build and run DEBUG_VM_PGTABLE.

config DEBUG_VM
	bool "Debug VM"
	depends on DEBUG_KERNEL
	help
	  Enable this to turn on extended checks in the virtual-memory system
	  that may impact performance.

	  If unsure, say N.

config DEBUG_VM_VMACACHE
	bool "Debug VMA caching"
	depends on DEBUG_VM
	help
	  Enable this to turn on VMA caching debug information. Doing so
	  can cause significant overhead, so only enable it in non-production
	  environments.

	  If unsure, say N.

config DEBUG_VM_RB
	bool "Debug VM red-black trees"
	depends on DEBUG_VM
	help
	  Enable VM red-black tree debugging information and extra validations.

	  If unsure, say N.

config DEBUG_VM_PGFLAGS
	bool "Debug page-flags operations"
	depends on DEBUG_VM
	help
	  Enables extra validation on page flags operations.

	  If unsure, say N.

config DEBUG_VM_PGTABLE
	bool "Debug arch page table for semantics compliance"
	depends on MMU
	depends on ARCH_HAS_DEBUG_VM_PGTABLE
	default y if DEBUG_VM
	help
	  This option provides a debug method which can be used to test
	  architecture page table helper functions on various platforms in
	  verifying if they comply with expected generic MM semantics. This
	  will help architecture code in making sure that any changes or
	  new additions of these helpers still conform to expected
	  semantics of the generic MM. Platforms will have to opt in for
	  this through ARCH_HAS_DEBUG_VM_PGTABLE.

	  If unsure, say N.

config ARCH_HAS_DEBUG_VIRTUAL
	bool

config DEBUG_VIRTUAL
	bool "Debug VM translations"
	depends on DEBUG_KERNEL && ARCH_HAS_DEBUG_VIRTUAL
	help
	  Enable some costly sanity checks in virtual to page code. This can
	  catch mistakes with virt_to_page() and friends.

	  If unsure, say N.

config DEBUG_NOMMU_REGIONS
	bool "Debug the global anon/private NOMMU mapping region tree"
	depends on DEBUG_KERNEL && !MMU
	help
	  This option causes the global tree of anonymous and private mapping
	  regions to be regularly checked for invalid topology.

config DEBUG_MEMORY_INIT
	bool "Debug memory initialisation" if EXPERT
	default !EXPERT
	help
	  Enable this for additional checks during memory initialisation.
	  The sanity checks verify aspects of the VM such as the memory model
	  and other information provided by the architecture. Verbose
	  information will be printed at KERN_DEBUG loglevel depending
	  on the mminit_loglevel= command-line option.

	  If unsure, say Y

config MEMORY_NOTIFIER_ERROR_INJECT
	tristate "Memory hotplug notifier error injection module"
	depends on MEMORY_HOTPLUG && NOTIFIER_ERROR_INJECTION
	help
	  This option provides the ability to inject artificial errors to
	  memory hotplug notifier chain callbacks.  It is controlled through
	  debugfs interface under /sys/kernel/debug/notifier-error-inject/memory

	  If the notifier call chain should be failed with some events
	  notified, write the error code to "actions/<notifier event>/error".

	  Example: Inject memory hotplug offline error (-12 == -ENOMEM)

	  # cd /sys/kernel/debug/notifier-error-inject/memory
	  # echo -12 > actions/MEM_GOING_OFFLINE/error
	  # echo offline > /sys/devices/system/memory/memoryXXX/state
	  bash: echo: write error: Cannot allocate memory

	  To compile this code as a module, choose M here: the module will
	  be called memory-notifier-error-inject.

	  If unsure, say N.

config DEBUG_PER_CPU_MAPS
	bool "Debug access to per_cpu maps"
	depends on DEBUG_KERNEL
	depends on SMP
	help
	  Say Y to verify that the per_cpu map being accessed has
	  been set up. This adds a fair amount of code to kernel memory
	  and decreases performance.

	  Say N if unsure.

config DEBUG_KMAP_LOCAL
	bool "Debug kmap_local temporary mappings"
	depends on DEBUG_KERNEL && KMAP_LOCAL
	help
	  This option enables additional error checking for the kmap_local
	  infrastructure.  Disable for production use.

config ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP
	bool

config DEBUG_KMAP_LOCAL_FORCE_MAP
	bool "Enforce kmap_local temporary mappings"
	depends on DEBUG_KERNEL && ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP
	select KMAP_LOCAL
	select DEBUG_KMAP_LOCAL
	help
	  This option enforces temporary mappings through the kmap_local
	  mechanism for non-highmem pages and on non-highmem systems.
	  Disable this for production systems!

config DEBUG_HIGHMEM
	bool "Highmem debugging"
	depends on DEBUG_KERNEL && HIGHMEM
	select DEBUG_KMAP_LOCAL_FORCE_MAP if ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP
	select DEBUG_KMAP_LOCAL
	help
	  This option enables additional error checking for high memory
	  systems.  Disable for production systems.

config HAVE_DEBUG_STACKOVERFLOW
	bool

config DEBUG_STACKOVERFLOW
	bool "Check for stack overflows"
	depends on DEBUG_KERNEL && HAVE_DEBUG_STACKOVERFLOW
	help
	  Say Y here if you want to check for overflows of kernel, IRQ
	  and exception stacks (if your architecture uses them). This
	  option will show detailed messages if free stack space drops
	  below a certain limit.

	  These kinds of bugs usually occur when call-chains in the
	  kernel get too deep, especially when interrupts are
	  involved.

	  Use this in cases where you see apparently random memory
	  corruption, especially if it appears in 'struct thread_info'

	  If in doubt, say "N".

source "lib/Kconfig.kasan"
source "lib/Kconfig.kfence"

endmenu # "Memory Debugging"

config DEBUG_SHIRQ
	bool "Debug shared IRQ handlers"
	depends on DEBUG_KERNEL
	help
	  Enable this to generate a spurious interrupt just before a shared
	  interrupt handler is deregistered (generating one when registering
	  is currently disabled). Drivers need to handle this correctly. Some
	  don't and need to be caught.

menu "Debug Oops, Lockups and Hangs"

config PANIC_ON_OOPS
	bool "Panic on Oops"
	help
	  Say Y here to enable the kernel to panic when it oopses. This
	  has the same effect as setting oops=panic on the kernel command
	  line.

	  This feature is useful to ensure that the kernel does not do
	  anything erroneous after an oops which could result in data
	  corruption or other issues.

	  Say N if unsure.

config PANIC_ON_OOPS_VALUE
	int
	range 0 1
	default 0 if !PANIC_ON_OOPS
	default 1 if PANIC_ON_OOPS

config PANIC_TIMEOUT
	int "panic timeout"
	default 0
	help
	  Set the timeout value (in seconds) until a reboot occurs when
	  the kernel panics. If n = 0, then we wait forever. A timeout
	  value n > 0 will wait n seconds before rebooting, while a timeout
	  value n < 0 will reboot immediately.

config LOCKUP_DETECTOR
	bool

config SOFTLOCKUP_DETECTOR
	bool "Detect Soft Lockups"
	depends on DEBUG_KERNEL && !S390
	select LOCKUP_DETECTOR
	help
	  Say Y here to enable the kernel to act as a watchdog to detect
	  soft lockups.

	  Softlockups are bugs that cause the kernel to loop in kernel
	  mode for more than 20 seconds, without giving other tasks a
	  chance to run.  The current stack trace is displayed upon
	  detection and the system will stay locked up.

config BOOTPARAM_SOFTLOCKUP_PANIC
	bool "Panic (Reboot) On Soft Lockups"
	depends on SOFTLOCKUP_DETECTOR
	help
	  Say Y here to enable the kernel to panic on "soft lockups",
	  which are bugs that cause the kernel to loop in kernel
	  mode for more than 20 seconds (configurable using the watchdog_thresh
	  sysctl), without giving other tasks a chance to run.

	  The panic can be used in combination with panic_timeout,
	  to cause the system to reboot automatically after a
	  lockup has been detected. This feature is useful for
	  high-availability systems that have uptime guarantees and
	  where a lockup must be resolved ASAP.

	  Say N if unsure.

config HARDLOCKUP_DETECTOR_PERF
	bool
	select SOFTLOCKUP_DETECTOR

#
# Enables a timestamp based low pass filter to compensate for perf based
# hard lockup detection which runs too fast due to turbo modes.
#
config HARDLOCKUP_CHECK_TIMESTAMP
	bool

#
# arch/ can define HAVE_HARDLOCKUP_DETECTOR_ARCH to provide their own hard
# lockup detector rather than the perf based detector.
#
config HARDLOCKUP_DETECTOR
	bool "Detect Hard Lockups"
	depends on DEBUG_KERNEL && !S390
	depends on HAVE_HARDLOCKUP_DETECTOR_PERF || HAVE_HARDLOCKUP_DETECTOR_ARCH
	select LOCKUP_DETECTOR
	select HARDLOCKUP_DETECTOR_PERF if HAVE_HARDLOCKUP_DETECTOR_PERF
	help
	  Say Y here to enable the kernel to act as a watchdog to detect
	  hard lockups.

	  Hardlockups are bugs that cause the CPU to loop in kernel mode
	  for more than 10 seconds, without letting other interrupts have a
	  chance to run.  The current stack trace is displayed upon detection
	  and the system will stay locked up.

config BOOTPARAM_HARDLOCKUP_PANIC
	bool "Panic (Reboot) On Hard Lockups"
	depends on HARDLOCKUP_DETECTOR
	help
	  Say Y here to enable the kernel to panic on "hard lockups",
	  which are bugs that cause the kernel to loop in kernel
	  mode with interrupts disabled for more than 10 seconds (configurable
	  using the watchdog_thresh sysctl).

	  Say N if unsure.

config DETECT_HUNG_TASK
	bool "Detect Hung Tasks"
	depends on DEBUG_KERNEL
	default SOFTLOCKUP_DETECTOR
	help
	  Say Y here to enable the kernel to detect "hung tasks",
	  which are bugs that cause the task to be stuck in
	  uninterruptible "D" state indefinitely.

	  When a hung task is detected, the kernel will print the
	  current stack trace (which you should report), but the
	  task will stay in uninterruptible state. If lockdep is
	  enabled then all held locks will also be reported. This
	  feature has negligible overhead.

config DEFAULT_HUNG_TASK_TIMEOUT
	int "Default timeout for hung task detection (in seconds)"
	depends on DETECT_HUNG_TASK
	default 120
	help
	  This option controls the default timeout (in seconds) used
	  to determine when a task has become non-responsive and should
	  be considered hung.

	  It can be adjusted at runtime via the kernel.hung_task_timeout_secs
	  sysctl or by writing a value to
	  /proc/sys/kernel/hung_task_timeout_secs.

	  A timeout of 0 disables the check.  The default is two minutes.
	  Keeping the default should be fine in most cases.

config BOOTPARAM_HUNG_TASK_PANIC
	bool "Panic (Reboot) On Hung Tasks"
	depends on DETECT_HUNG_TASK
	help
	  Say Y here to enable the kernel to panic on "hung tasks",
	  which are bugs that cause the kernel to leave a task stuck
	  in uninterruptible "D" state.

	  The panic can be used in combination with panic_timeout,
	  to cause the system to reboot automatically after a
	  hung task has been detected. This feature is useful for
	  high-availability systems that have uptime guarantees and
	  where a hung tasks must be resolved ASAP.

	  Say N if unsure.

config WQ_WATCHDOG
	bool "Detect Workqueue Stalls"
	depends on DEBUG_KERNEL
	help
	  Say Y here to enable stall detection on workqueues.  If a
	  worker pool doesn't make forward progress on a pending work
	  item for over a given amount of time, 30s by default, a
	  warning message is printed along with dump of workqueue
	  state.  This can be configured through kernel parameter
	  "workqueue.watchdog_thresh" and its sysfs counterpart.

config TEST_LOCKUP
	tristate "Test module to generate lockups"
	depends on m
	help
	  This builds the "test_lockup" module that helps to make sure
	  that watchdogs and lockup detectors are working properly.

	  Depending on module parameters it could emulate soft or hard
	  lockup, "hung task", or locking arbitrary lock for a long time.
	  Also it could generate series of lockups with cooling-down periods.

	  If unsure, say N.

endmenu # "Debug lockups and hangs"

menu "Scheduler Debugging"

config SCHED_DEBUG
	bool "Collect scheduler debugging info"
	depends on DEBUG_KERNEL && PROC_FS
	default y
	help
	  If you say Y here, the /proc/sched_debug file will be provided
	  that can help debug the scheduler. The runtime overhead of this
	  option is minimal.

config SCHED_INFO
	bool
	default n

config SCHEDSTATS
	bool "Collect scheduler statistics"
	depends on DEBUG_KERNEL && PROC_FS
	select SCHED_INFO
	help
	  If you say Y here, additional code will be inserted into the
	  scheduler and related routines to collect statistics about
	  scheduler behavior and provide them in /proc/schedstat.  These
	  stats may be useful for both tuning and debugging the scheduler
	  If you aren't debugging the scheduler or trying to tune a specific
	  application, you can say N to avoid the very slight overhead
	  this adds.

endmenu

config DEBUG_TIMEKEEPING
	bool "Enable extra timekeeping sanity checking"
	help
	  This option will enable additional timekeeping sanity checks
	  which may be helpful when diagnosing issues where timekeeping
	  problems are suspected.

	  This may include checks in the timekeeping hotpaths, so this
	  option may have a (very small) performance impact to some
	  workloads.

	  If unsure, say N.

config DEBUG_PREEMPT
	bool "Debug preemptible kernel"
	depends on DEBUG_KERNEL && PREEMPTION && TRACE_IRQFLAGS_SUPPORT
	default y
	help
	  If you say Y here then the kernel will use a debug variant of the
	  commonly used smp_processor_id() function and will print warnings
	  if kernel code uses it in a preemption-unsafe way. Also, the kernel
	  will detect preemption count underflows.

menu "Lock Debugging (spinlocks, mutexes, etc...)"

config LOCK_DEBUGGING_SUPPORT
	bool
	depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
	default y

config PROVE_LOCKING
	bool "Lock debugging: prove locking correctness"
	depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
	select LOCKDEP
	select DEBUG_SPINLOCK
	select DEBUG_MUTEXES if !PREEMPT_RT
	select DEBUG_RT_MUTEXES if RT_MUTEXES
	select DEBUG_RWSEMS
	select DEBUG_WW_MUTEX_SLOWPATH
	select DEBUG_LOCK_ALLOC
	select PREEMPT_COUNT if !ARCH_NO_PREEMPT
	select TRACE_IRQFLAGS
	default n
	help
	 This feature enables the kernel to prove that all locking
	 that occurs in the kernel runtime is mathematically
	 correct: that under no circumstance could an arbitrary (and
	 not yet triggered) combination of observed locking
	 sequences (on an arbitrary number of CPUs, running an
	 arbitrary number of tasks and interrupt contexts) cause a
	 deadlock.

	 In short, this feature enables the kernel to report locking
	 related deadlocks before they actually occur.

	 The proof does not depend on how hard and complex a
	 deadlock scenario would be to trigger: how many
	 participant CPUs, tasks and irq-contexts would be needed
	 for it to trigger. The proof also does not depend on
	 timing: if a race and a resulting deadlock is possible
	 theoretically (no matter how unlikely the race scenario
	 is), it will be proven so and will immediately be
	 reported by the kernel (once the event is observed that
	 makes the deadlock theoretically possible).

	 If a deadlock is impossible (i.e. the locking rules, as
	 observed by the kernel, are mathematically correct), the
	 kernel reports nothing.

	 NOTE: this feature can also be enabled for rwlocks, mutexes
	 and rwsems - in which case all dependencies between these
	 different locking variants are observed and mapped too, and
	 the proof of observed correctness is also maintained for an
	 arbitrary combination of these separate locking variants.

	 For more details, see Documentation/locking/lockdep-design.rst.

config PROVE_RAW_LOCK_NESTING
	bool "Enable raw_spinlock - spinlock nesting checks"
	depends on PROVE_LOCKING
	default n
	help
	 Enable the raw_spinlock vs. spinlock nesting checks which ensure
	 that the lock nesting rules for PREEMPT_RT enabled kernels are
	 not violated.

	 NOTE: There are known nesting problems. So if you enable this
	 option expect lockdep splats until these problems have been fully
	 addressed which is work in progress. This config switch allows to
	 identify and analyze these problems. It will be removed and the
	 check permanently enabled once the main issues have been fixed.

	 If unsure, select N.

config LOCK_STAT
	bool "Lock usage statistics"
	depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
	select LOCKDEP
	select DEBUG_SPINLOCK
	select DEBUG_MUTEXES if !PREEMPT_RT
	select DEBUG_RT_MUTEXES if RT_MUTEXES
	select DEBUG_LOCK_ALLOC
	default n
	help
	 This feature enables tracking lock contention points

	 For more details, see Documentation/locking/lockstat.rst

	 This also enables lock events required by "perf lock",
	 subcommand of perf.
	 If you want to use "perf lock", you also need to turn on
	 CONFIG_EVENT_TRACING.

	 CONFIG_LOCK_STAT defines "contended" and "acquired" lock events.
	 (CONFIG_LOCKDEP defines "acquire" and "release" events.)

config DEBUG_RT_MUTEXES
	bool "RT Mutex debugging, deadlock detection"
	depends on DEBUG_KERNEL && RT_MUTEXES
	help
	 This allows rt mutex semantics violations and rt mutex related
	 deadlocks (lockups) to be detected and reported automatically.

config DEBUG_SPINLOCK
	bool "Spinlock and rw-lock debugging: basic checks"
	depends on DEBUG_KERNEL
	select UNINLINE_SPIN_UNLOCK
	help
	  Say Y here and build SMP to catch missing spinlock initialization
	  and certain other kinds of spinlock errors commonly made.  This is
	  best used in conjunction with the NMI watchdog so that spinlock
	  deadlocks are also debuggable.

config DEBUG_MUTEXES
	bool "Mutex debugging: basic checks"
	depends on DEBUG_KERNEL && !PREEMPT_RT
	help
	 This feature allows mutex semantics violations to be detected and
	 reported.

config DEBUG_WW_MUTEX_SLOWPATH
	bool "Wait/wound mutex debugging: Slowpath testing"
	depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
	select DEBUG_LOCK_ALLOC
	select DEBUG_SPINLOCK
	select DEBUG_MUTEXES if !PREEMPT_RT
	select DEBUG_RT_MUTEXES if PREEMPT_RT
	help
	 This feature enables slowpath testing for w/w mutex users by
	 injecting additional -EDEADLK wound/backoff cases. Together with
	 the full mutex checks enabled with (CONFIG_PROVE_LOCKING) this
	 will test all possible w/w mutex interface abuse with the
	 exception of simply not acquiring all the required locks.
	 Note that this feature can introduce significant overhead, so
	 it really should not be enabled in a production or distro kernel,
	 even a debug kernel.  If you are a driver writer, enable it.  If
	 you are a distro, do not.

config DEBUG_RWSEMS
	bool "RW Semaphore debugging: basic checks"
	depends on DEBUG_KERNEL
	help
	  This debugging feature allows mismatched rw semaphore locks
	  and unlocks to be detected and reported.

config DEBUG_LOCK_ALLOC
	bool "Lock debugging: detect incorrect freeing of live locks"
	depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
	select DEBUG_SPINLOCK
	select DEBUG_MUTEXES if !PREEMPT_RT
	select DEBUG_RT_MUTEXES if RT_MUTEXES
	select LOCKDEP
	help
	 This feature will check whether any held lock (spinlock, rwlock,
	 mutex or rwsem) is incorrectly freed by the kernel, via any of the
	 memory-freeing routines (kfree(), kmem_cache_free(), free_pages(),
	 vfree(), etc.), whether a live lock is incorrectly reinitialized via
	 spin_lock_init()/mutex_init()/etc., or whether there is any lock
	 held during task exit.

config LOCKDEP
	bool
	depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
	select STACKTRACE
	select KALLSYMS
	select KALLSYMS_ALL

config LOCKDEP_SMALL
	bool

config LOCKDEP_BITS
	int "Bitsize for MAX_LOCKDEP_ENTRIES"
	depends on LOCKDEP && !LOCKDEP_SMALL
	range 10 30
	default 15
	help
	  Try increasing this value if you hit "BUG: MAX_LOCKDEP_ENTRIES too low!" message.

config LOCKDEP_CHAINS_BITS
	int "Bitsize for MAX_LOCKDEP_CHAINS"
	depends on LOCKDEP && !LOCKDEP_SMALL
	range 10 30
	default 16
	help
	  Try increasing this value if you hit "BUG: MAX_LOCKDEP_CHAINS too low!" message.

config LOCKDEP_STACK_TRACE_BITS
	int "Bitsize for MAX_STACK_TRACE_ENTRIES"
	depends on LOCKDEP && !LOCKDEP_SMALL
	range 10 30
	default 19
	help
	  Try increasing this value if you hit "BUG: MAX_STACK_TRACE_ENTRIES too low!" message.

config LOCKDEP_STACK_TRACE_HASH_BITS
	int "Bitsize for STACK_TRACE_HASH_SIZE"
	depends on LOCKDEP && !LOCKDEP_SMALL
	range 10 30
	default 14
	help
	  Try increasing this value if you need large MAX_STACK_TRACE_ENTRIES.

config LOCKDEP_CIRCULAR_QUEUE_BITS
	int "Bitsize for elements in circular_queue struct"
	depends on LOCKDEP
	range 10 30
	default 12
	help
	  Try increasing this value if you hit "lockdep bfs error:-1" warning due to __cq_enqueue() failure.

config DEBUG_LOCKDEP
	bool "Lock dependency engine debugging"
	depends on DEBUG_KERNEL && LOCKDEP
	select DEBUG_IRQFLAGS
	help
	  If you say Y here, the lock dependency engine will do
	  additional runtime checks to debug itself, at the price
	  of more runtime overhead.

config DEBUG_ATOMIC_SLEEP
	bool "Sleep inside atomic section checking"
	select PREEMPT_COUNT
	depends on DEBUG_KERNEL
	depends on !ARCH_NO_PREEMPT
	help
	  If you say Y here, various routines which may sleep will become very
	  noisy if they are called inside atomic sections: when a spinlock is
	  held, inside an rcu read side critical section, inside preempt disabled
	  sections, inside an interrupt, etc...

config DEBUG_LOCKING_API_SELFTESTS
	bool "Locking API boot-time self-tests"
	depends on DEBUG_KERNEL
	help
	  Say Y here if you want the kernel to run a short self-test during
	  bootup. The self-test checks whether common types of locking bugs
	  are detected by debugging mechanisms or not. (if you disable
	  lock debugging then those bugs won't be detected of course.)
	  The following locking APIs are covered: spinlocks, rwlocks,
	  mutexes and rwsems.

config LOCK_TORTURE_TEST
	tristate "torture tests for locking"
	depends on DEBUG_KERNEL
	select TORTURE_TEST
	help
	  This option provides a kernel module that runs torture tests
	  on kernel locking primitives.  The kernel module may be built
	  after the fact on the running kernel to be tested, if desired.

	  Say Y here if you want kernel locking-primitive torture tests
	  to be built into the kernel.
	  Say M if you want these torture tests to build as a module.
	  Say N if you are unsure.

config WW_MUTEX_SELFTEST
	tristate "Wait/wound mutex selftests"
	help
	  This option provides a kernel module that runs tests on the
	  on the struct ww_mutex locking API.

	  It is recommended to enable DEBUG_WW_MUTEX_SLOWPATH in conjunction
	  with this test harness.

	  Say M if you want these self tests to build as a module.
	  Say N if you are unsure.

config SCF_TORTURE_TEST
	tristate "torture tests for smp_call_function*()"
	depends on DEBUG_KERNEL
	select TORTURE_TEST
	help
	  This option provides a kernel module that runs torture tests
	  on the smp_call_function() family of primitives.  The kernel
	  module may be built after the fact on the running kernel to
	  be tested, if desired.

config CSD_LOCK_WAIT_DEBUG
	bool "Debugging for csd_lock_wait(), called from smp_call_function*()"
	depends on DEBUG_KERNEL
	depends on 64BIT
	default n
	help
	  This option enables debug prints when CPUs are slow to respond
	  to the smp_call_function*() IPI wrappers.  These debug prints
	  include the IPI handler function currently executing (if any)
	  and relevant stack traces.

endmenu # lock debugging

config TRACE_IRQFLAGS
	depends on TRACE_IRQFLAGS_SUPPORT
	bool
	help
	  Enables hooks to interrupt enabling and disabling for
	  either tracing or lock debugging.

config TRACE_IRQFLAGS_NMI
	def_bool y
	depends on TRACE_IRQFLAGS
	depends on TRACE_IRQFLAGS_NMI_SUPPORT

config DEBUG_IRQFLAGS
	bool "Debug IRQ flag manipulation"
	help
	  Enables checks for potentially unsafe enabling or disabling of
	  interrupts, such as calling raw_local_irq_restore() when interrupts
	  are enabled.

config STACKTRACE
	bool "Stack backtrace support"
	depends on STACKTRACE_SUPPORT
	help
	  This option causes the kernel to create a /proc/pid/stack for
	  every process, showing its current stack trace.
	  It is also used by various kernel debugging features that require
	  stack trace generation.

config WARN_ALL_UNSEEDED_RANDOM
	bool "Warn for all uses of unseeded randomness"
	default n
	help
	  Some parts of the kernel contain bugs relating to their use of
	  cryptographically secure random numbers before it's actually possible
	  to generate those numbers securely. This setting ensures that these
	  flaws don't go unnoticed, by enabling a message, should this ever
	  occur. This will allow people with obscure setups to know when things
	  are going wrong, so that they might contact developers about fixing
	  it.

	  Unfortunately, on some models of some architectures getting
	  a fully seeded CRNG is extremely difficult, and so this can
	  result in dmesg getting spammed for a surprisingly long
	  time.  This is really bad from a security perspective, and
	  so architecture maintainers really need to do what they can
	  to get the CRNG seeded sooner after the system is booted.
	  However, since users cannot do anything actionable to
	  address this, by default this option is disabled.

	  Say Y here if you want to receive warnings for all uses of
	  unseeded randomness.  This will be of use primarily for
	  those developers interested in improving the security of
	  Linux kernels running on their architecture (or
	  subarchitecture).

config DEBUG_KOBJECT
	bool "kobject debugging"
	depends on DEBUG_KERNEL
	help
	  If you say Y here, some extra kobject debugging messages will be sent
	  to the syslog.

config DEBUG_KOBJECT_RELEASE
	bool "kobject release debugging"
	depends on DEBUG_OBJECTS_TIMERS
	help
	  kobjects are reference counted objects.  This means that their
	  last reference count put is not predictable, and the kobject can
	  live on past the point at which a driver decides to drop its
	  initial reference to the kobject gained on allocation.  An
	  example of this would be a struct device which has just been
	  unregistered.

	  However, some buggy drivers assume that after such an operation,
	  the memory backing the kobject can be immediately freed.  This
	  goes completely against the principles of a refcounted object.

	  If you say Y here, the kernel will delay the release of kobjects
	  on the last reference count to improve the visibility of this
	  kind of kobject release bug.

config HAVE_DEBUG_BUGVERBOSE
	bool

menu "Debug kernel data structures"

config DEBUG_LIST
	bool "Debug linked list manipulation"
	depends on DEBUG_KERNEL || BUG_ON_DATA_CORRUPTION
	help
	  Enable this to turn on extended checks in the linked-list
	  walking routines.

	  If unsure, say N.

config DEBUG_PLIST
	bool "Debug priority linked list manipulation"
	depends on DEBUG_KERNEL
	help
	  Enable this to turn on extended checks in the priority-ordered
	  linked-list (plist) walking routines.  This checks the entire
	  list multiple times during each manipulation.

	  If unsure, say N.

config DEBUG_SG
	bool "Debug SG table operations"
	depends on DEBUG_KERNEL
	help
	  Enable this to turn on checks on scatter-gather tables. This can
	  help find problems with drivers that do not properly initialize
	  their sg tables.

	  If unsure, say N.

config DEBUG_NOTIFIERS
	bool "Debug notifier call chains"
	depends on DEBUG_KERNEL
	help
	  Enable this to turn on sanity checking for notifier call chains.
	  This is most useful for kernel developers to make sure that
	  modules properly unregister themselves from notifier chains.
	  This is a relatively cheap check but if you care about maximum
	  performance, say N.

config BUG_ON_DATA_CORRUPTION
	bool "Trigger a BUG when data corruption is detected"
	select DEBUG_LIST
	help
	  Select this option if the kernel should BUG when it encounters
	  data corruption in kernel memory structures when they get checked
	  for validity.

	  If unsure, say N.

endmenu

config DEBUG_CREDENTIALS
	bool "Debug credential management"
	depends on DEBUG_KERNEL
	help
	  Enable this to turn on some debug checking for credential
	  management.  The additional code keeps track of the number of
	  pointers from task_structs to any given cred struct, and checks to
	  see that this number never exceeds the usage count of the cred
	  struct.

	  Furthermore, if SELinux is enabled, this also checks that the
	  security pointer in the cred struct is never seen to be invalid.

	  If unsure, say N.

source "kernel/rcu/Kconfig.debug"

config DEBUG_WQ_FORCE_RR_CPU
	bool "Force round-robin CPU selection for unbound work items"
	depends on DEBUG_KERNEL
	default n
	help
	  Workqueue used to implicitly guarantee that work items queued
	  without explicit CPU specified are put on the local CPU.  This
	  guarantee is no longer true and while local CPU is still
	  preferred work items may be put on foreign CPUs.  Kernel
	  parameter "workqueue.debug_force_rr_cpu" is added to force
	  round-robin CPU selection to flush out usages which depend on the
	  now broken guarantee.  This config option enables the debug
	  feature by default.  When enabled, memory and cache locality will
	  be impacted.

config CPU_HOTPLUG_STATE_CONTROL
	bool "Enable CPU hotplug state control"
	depends on DEBUG_KERNEL
	depends on HOTPLUG_CPU
	default n
	help
	  Allows to write steps between "offline" and "online" to the CPUs
	  sysfs target file so states can be stepped granular. This is a debug
	  option for now as the hotplug machinery cannot be stopped and
	  restarted at arbitrary points yet.

	  Say N if your are unsure.

config LATENCYTOP
	bool "Latency measuring infrastructure"
	depends on DEBUG_KERNEL
	depends on STACKTRACE_SUPPORT
	depends on PROC_FS
	depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86
	select KALLSYMS
	select KALLSYMS_ALL
	select STACKTRACE
	select SCHEDSTATS
	help
	  Enable this option if you want to use the LatencyTOP tool
	  to find out which userspace is blocking on what kernel operations.

source "kernel/trace/Kconfig"

config PROVIDE_OHCI1394_DMA_INIT
	bool "Remote debugging over FireWire early on boot"
	depends on PCI && X86
	help
	  If you want to debug problems which hang or crash the kernel early
	  on boot and the crashing machine has a FireWire port, you can use
	  this feature to remotely access the memory of the crashed machine
	  over FireWire. This employs remote DMA as part of the OHCI1394
	  specification which is now the standard for FireWire controllers.

	  With remote DMA, you can monitor the printk buffer remotely using
	  firescope and access all memory below 4GB using fireproxy from gdb.
	  Even controlling a kernel debugger is possible using remote DMA.

	  Usage:

	  If ohci1394_dma=early is used as boot parameter, it will initialize
	  all OHCI1394 controllers which are found in the PCI config space.

	  As all changes to the FireWire bus such as enabling and disabling
	  devices cause a bus reset and thereby disable remote DMA for all
	  devices, be sure to have the cable plugged and FireWire enabled on
	  the debugging host before booting the debug target for debugging.

	  This code (~1k) is freed after boot. By then, the firewire stack
	  in charge of the OHCI-1394 controllers should be used instead.

	  See Documentation/core-api/debugging-via-ohci1394.rst for more information.

source "samples/Kconfig"

config ARCH_HAS_DEVMEM_IS_ALLOWED
	bool

config STRICT_DEVMEM
	bool "Filter access to /dev/mem"
	depends on MMU && DEVMEM
	depends on ARCH_HAS_DEVMEM_IS_ALLOWED || GENERIC_LIB_DEVMEM_IS_ALLOWED
	default y if PPC || X86 || ARM64
	help
	  If this option is disabled, you allow userspace (root) access to all
	  of memory, including kernel and userspace memory. Accidental
	  access to this is obviously disastrous, but specific access can
	  be used by people debugging the kernel. Note that with PAT support
	  enabled, even in this case there are restrictions on /dev/mem
	  use due to the cache aliasing requirements.

	  If this option is switched on, and IO_STRICT_DEVMEM=n, the /dev/mem
	  file only allows userspace access to PCI space and the BIOS code and
	  data regions.  This is sufficient for dosemu and X and all common
	  users of /dev/mem.

	  If in doubt, say Y.

config IO_STRICT_DEVMEM
	bool "Filter I/O access to /dev/mem"
	depends on STRICT_DEVMEM
	help
	  If this option is disabled, you allow userspace (root) access to all
	  io-memory regardless of whether a driver is actively using that
	  range.  Accidental access to this is obviously disastrous, but
	  specific access can be used by people debugging kernel drivers.

	  If this option is switched on, the /dev/mem file only allows
	  userspace access to *idle* io-memory ranges (see /proc/iomem) This
	  may break traditional users of /dev/mem (dosemu, legacy X, etc...)
	  if the driver using a given range cannot be disabled.

	  If in doubt, say Y.

menu "$(SRCARCH) Debugging"

source "arch/$(SRCARCH)/Kconfig.debug"

endmenu

menu "Kernel Testing and Coverage"

source "lib/kunit/Kconfig"

config NOTIFIER_ERROR_INJECTION
	tristate "Notifier error injection"
	depends on DEBUG_KERNEL
	select DEBUG_FS
	help
	  This option provides the ability to inject artificial errors to
	  specified notifier chain callbacks. It is useful to test the error
	  handling of notifier call chain failures.

	  Say N if unsure.

config PM_NOTIFIER_ERROR_INJECT
	tristate "PM notifier error injection module"
	depends on PM && NOTIFIER_ERROR_INJECTION
	default m if PM_DEBUG
	help
	  This option provides the ability to inject artificial errors to
	  PM notifier chain callbacks.  It is controlled through debugfs
	  interface /sys/kernel/debug/notifier-error-inject/pm

	  If the notifier call chain should be failed with some events
	  notified, write the error code to "actions/<notifier event>/error".

	  Example: Inject PM suspend error (-12 = -ENOMEM)

	  # cd /sys/kernel/debug/notifier-error-inject/pm/
	  # echo -12 > actions/PM_SUSPEND_PREPARE/error
	  # echo mem > /sys/power/state
	  bash: echo: write error: Cannot allocate memory

	  To compile this code as a module, choose M here: the module will
	  be called pm-notifier-error-inject.

	  If unsure, say N.

config OF_RECONFIG_NOTIFIER_ERROR_INJECT
	tristate "OF reconfig notifier error injection module"
	depends on OF_DYNAMIC && NOTIFIER_ERROR_INJECTION
	help
	  This option provides the ability to inject artificial errors to
	  OF reconfig notifier chain callbacks.  It is controlled
	  through debugfs interface under
	  /sys/kernel/debug/notifier-error-inject/OF-reconfig/

	  If the notifier call chain should be failed with some events
	  notified, write the error code to "actions/<notifier event>/error".

	  To compile this code as a module, choose M here: the module will
	  be called of-reconfig-notifier-error-inject.

	  If unsure, say N.

config NETDEV_NOTIFIER_ERROR_INJECT
	tristate "Netdev notifier error injection module"
	depends on NET && NOTIFIER_ERROR_INJECTION
	help
	  This option provides the ability to inject artificial errors to
	  netdevice notifier chain callbacks.  It is controlled through debugfs
	  interface /sys/kernel/debug/notifier-error-inject/netdev

	  If the notifier call chain should be failed with some events
	  notified, write the error code to "actions/<notifier event>/error".

	  Example: Inject netdevice mtu change error (-22 = -EINVAL)

	  # cd /sys/kernel/debug/notifier-error-inject/netdev
	  # echo -22 > actions/NETDEV_CHANGEMTU/error
	  # ip link set eth0 mtu 1024
	  RTNETLINK answers: Invalid argument

	  To compile this code as a module, choose M here: the module will
	  be called netdev-notifier-error-inject.

	  If unsure, say N.

config FUNCTION_ERROR_INJECTION
	bool "Fault-injections of functions"
	depends on HAVE_FUNCTION_ERROR_INJECTION && KPROBES
	help
	  Add fault injections into various functions that are annotated with
	  ALLOW_ERROR_INJECTION() in the kernel. BPF may also modify the return
	  value of theses functions. This is useful to test error paths of code.

	  If unsure, say N

config FAULT_INJECTION
	bool "Fault-injection framework"
	depends on DEBUG_KERNEL
	help
	  Provide fault-injection framework.
	  For more details, see Documentation/fault-injection/.

config FAILSLAB
	bool "Fault-injection capability for kmalloc"
	depends on FAULT_INJECTION
	depends on SLAB || SLUB
	help
	  Provide fault-injection capability for kmalloc.

config FAIL_PAGE_ALLOC
	bool "Fault-injection capability for alloc_pages()"
	depends on FAULT_INJECTION
	help
	  Provide fault-injection capability for alloc_pages().

config FAULT_INJECTION_USERCOPY
	bool "Fault injection capability for usercopy functions"
	depends on FAULT_INJECTION
	help
	  Provides fault-injection capability to inject failures
	  in usercopy functions (copy_from_user(), get_user(), ...).

config FAIL_MAKE_REQUEST
	bool "Fault-injection capability for disk IO"
	depends on FAULT_INJECTION && BLOCK
	help
	  Provide fault-injection capability for disk IO.

config FAIL_IO_TIMEOUT
	bool "Fault-injection capability for faking disk interrupts"
	depends on FAULT_INJECTION && BLOCK
	help
	  Provide fault-injection capability on end IO handling. This
	  will make the block layer "forget" an interrupt as configured,
	  thus exercising the error handling.

	  Only works with drivers that use the generic timeout handling,
	  for others it won't do anything.

config FAIL_FUTEX
	bool "Fault-injection capability for futexes"
	select DEBUG_FS
	depends on FAULT_INJECTION && FUTEX
	help
	  Provide fault-injection capability for futexes.

config FAULT_INJECTION_DEBUG_FS
	bool "Debugfs entries for fault-injection capabilities"
	depends on FAULT_INJECTION && SYSFS && DEBUG_FS
	help
	  Enable configuration of fault-injection capabilities via debugfs.

config FAIL_FUNCTION
	bool "Fault-injection capability for functions"
	depends on FAULT_INJECTION_DEBUG_FS && FUNCTION_ERROR_INJECTION
	help
	  Provide function-based fault-injection capability.
	  This will allow you to override a specific function with a return
	  with given return value. As a result, function caller will see
	  an error value and have to handle it. This is useful to test the
	  error handling in various subsystems.

config FAIL_MMC_REQUEST
	bool "Fault-injection capability for MMC IO"
	depends on FAULT_INJECTION_DEBUG_FS && MMC
	help
	  Provide fault-injection capability for MMC IO.
	  This will make the mmc core return data errors. This is
	  useful to test the error handling in the mmc block device
	  and to test how the mmc host driver handles retries from
	  the block device.

config FAIL_SUNRPC
	bool "Fault-injection capability for SunRPC"
	depends on FAULT_INJECTION_DEBUG_FS && SUNRPC_DEBUG
	help
	  Provide fault-injection capability for SunRPC and
	  its consumers.

config FAULT_INJECTION_STACKTRACE_FILTER
	bool "stacktrace filter for fault-injection capabilities"
	depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
	depends on !X86_64
	select STACKTRACE
	depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86
	help
	  Provide stacktrace filter for fault-injection capabilities

config ARCH_HAS_KCOV
	bool
	help
	  An architecture should select this when it can successfully
	  build and run with CONFIG_KCOV. This typically requires
	  disabling instrumentation for some early boot code.

config CC_HAS_SANCOV_TRACE_PC
	def_bool $(cc-option,-fsanitize-coverage=trace-pc)


config KCOV
	bool "Code coverage for fuzzing"
	depends on ARCH_HAS_KCOV
	depends on CC_HAS_SANCOV_TRACE_PC || GCC_PLUGINS
	depends on !ARCH_WANTS_NO_INSTR || HAVE_NOINSTR_HACK || \
		   GCC_VERSION >= 120000 || CLANG_VERSION >= 130000
	select DEBUG_FS
	select GCC_PLUGIN_SANCOV if !CC_HAS_SANCOV_TRACE_PC
	select OBJTOOL if HAVE_NOINSTR_HACK
	help
	  KCOV exposes kernel code coverage information in a form suitable
	  for coverage-guided fuzzing (randomized testing).

	  If RANDOMIZE_BASE is enabled, PC values will not be stable across
	  different machines and across reboots. If you need stable PC values,
	  disable RANDOMIZE_BASE.

	  For more details, see Documentation/dev-tools/kcov.rst.

config KCOV_ENABLE_COMPARISONS
	bool "Enable comparison operands collection by KCOV"
	depends on KCOV
	depends on $(cc-option,-fsanitize-coverage=trace-cmp)
	help
	  KCOV also exposes operands of every comparison in the instrumented
	  code along with operand sizes and PCs of the comparison instructions.
	  These operands can be used by fuzzing engines to improve the quality
	  of fuzzing coverage.

config KCOV_INSTRUMENT_ALL
	bool "Instrument all code by default"
	depends on KCOV
	default y
	help
	  If you are doing generic system call fuzzing (like e.g. syzkaller),
	  then you will want to instrument the whole kernel and you should
	  say y here. If you are doing more targeted fuzzing (like e.g.
	  filesystem fuzzing with AFL) then you will want to enable coverage
	  for more specific subsets of files, and should say n here.

config KCOV_IRQ_AREA_SIZE
	hex "Size of interrupt coverage collection area in words"
	depends on KCOV
	default 0x40000
	help
	  KCOV uses preallocated per-cpu areas to collect coverage from
	  soft interrupts. This specifies the size of those areas in the
	  number of unsigned long words.

menuconfig RUNTIME_TESTING_MENU
	bool "Runtime Testing"
	def_bool y

if RUNTIME_TESTING_MENU

config LKDTM
	tristate "Linux Kernel Dump Test Tool Module"
	depends on DEBUG_FS
	help
	This module enables testing of the different dumping mechanisms by
	inducing system failures at predefined crash points.
	If you don't need it: say N
	Choose M here to compile this code as a module. The module will be
	called lkdtm.

	Documentation on how to use the module can be found in
	Documentation/fault-injection/provoke-crashes.rst

config CPUMASK_KUNIT_TEST
	tristate "KUnit test for cpumask" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Enable to turn on cpumask tests, running at boot or module load time.

	  For more information on KUnit and unit tests in general, please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config TEST_LIST_SORT
	tristate "Linked list sorting test" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Enable this to turn on 'list_sort()' function test. This test is
	  executed only once during system boot (so affects only boot time),
	  or at module load time.

	  If unsure, say N.

config TEST_MIN_HEAP
	tristate "Min heap test"
	depends on DEBUG_KERNEL || m
	help
	  Enable this to turn on min heap function tests. This test is
	  executed only once during system boot (so affects only boot time),
	  or at module load time.

	  If unsure, say N.

config TEST_SORT
	tristate "Array-based sort test" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  This option enables the self-test function of 'sort()' at boot,
	  or at module load time.

	  If unsure, say N.

config TEST_DIV64
	tristate "64bit/32bit division and modulo test"
	depends on DEBUG_KERNEL || m
	help
	  Enable this to turn on 'do_div()' function test. This test is
	  executed only once during system boot (so affects only boot time),
	  or at module load time.

	  If unsure, say N.

config KPROBES_SANITY_TEST
	tristate "Kprobes sanity tests" if !KUNIT_ALL_TESTS
	depends on DEBUG_KERNEL
	depends on KPROBES
	depends on KUNIT
	select STACKTRACE if ARCH_CORRECT_STACKTRACE_ON_KRETPROBE
	default KUNIT_ALL_TESTS
	help
	  This option provides for testing basic kprobes functionality on
	  boot. Samples of kprobe and kretprobe are inserted and
	  verified for functionality.

	  Say N if you are unsure.

config FPROBE_SANITY_TEST
	bool "Self test for fprobe"
	depends on DEBUG_KERNEL
	depends on FPROBE
	depends on KUNIT=y
	help
	  This option will enable testing the fprobe when the system boot.
	  A series of tests are made to verify that the fprobe is functioning
	  properly.

	  Say N if you are unsure.

config BACKTRACE_SELF_TEST
	tristate "Self test for the backtrace code"
	depends on DEBUG_KERNEL
	help
	  This option provides a kernel module that can be used to test
	  the kernel stack backtrace code. This option is not useful
	  for distributions or general kernels, but only for kernel
	  developers working on architecture code.

	  Note that if you want to also test saved backtraces, you will
	  have to enable STACKTRACE as well.

	  Say N if you are unsure.

config TEST_REF_TRACKER
	tristate "Self test for reference tracker"
	depends on DEBUG_KERNEL && STACKTRACE_SUPPORT
	select REF_TRACKER
	help
	  This option provides a kernel module performing tests
	  using reference tracker infrastructure.

	  Say N if you are unsure.

config RBTREE_TEST
	tristate "Red-Black tree test"
	depends on DEBUG_KERNEL
	help
	  A benchmark measuring the performance of the rbtree library.
	  Also includes rbtree invariant checks.

config REED_SOLOMON_TEST
	tristate "Reed-Solomon library test"
	depends on DEBUG_KERNEL || m
	select REED_SOLOMON
	select REED_SOLOMON_ENC16
	select REED_SOLOMON_DEC16
	help
	  This option enables the self-test function of rslib at boot,
	  or at module load time.

	  If unsure, say N.

config INTERVAL_TREE_TEST
	tristate "Interval tree test"
	depends on DEBUG_KERNEL
	select INTERVAL_TREE
	help
	  A benchmark measuring the performance of the interval tree library

config PERCPU_TEST
	tristate "Per cpu operations test"
	depends on m && DEBUG_KERNEL
	help
	  Enable this option to build test module which validates per-cpu
	  operations.

	  If unsure, say N.

config ATOMIC64_SELFTEST
	tristate "Perform an atomic64_t self-test"
	help
	  Enable this option to test the atomic64_t functions at boot or
	  at module load time.

	  If unsure, say N.

config ASYNC_RAID6_TEST
	tristate "Self test for hardware accelerated raid6 recovery"
	depends on ASYNC_RAID6_RECOV
	select ASYNC_MEMCPY
	help
	  This is a one-shot self test that permutes through the
	  recovery of all the possible two disk failure scenarios for a
	  N-disk array.  Recovery is performed with the asynchronous
	  raid6 recovery routines, and will optionally use an offload
	  engine if one is available.

	  If unsure, say N.

config TEST_HEXDUMP
	tristate "Test functions located in the hexdump module at runtime"

config STRING_SELFTEST
	tristate "Test string functions at runtime"

config TEST_STRING_HELPERS
	tristate "Test functions located in the string_helpers module at runtime"

config TEST_STRSCPY
	tristate "Test strscpy*() family of functions at runtime"

config TEST_KSTRTOX
	tristate "Test kstrto*() family of functions at runtime"

config TEST_PRINTF
	tristate "Test printf() family of functions at runtime"

config TEST_SCANF
	tristate "Test scanf() family of functions at runtime"

config TEST_BITMAP
	tristate "Test bitmap_*() family of functions at runtime"
	help
	  Enable this option to test the bitmap functions at boot.

	  If unsure, say N.

config TEST_UUID
	tristate "Test functions located in the uuid module at runtime"

config TEST_XARRAY
	tristate "Test the XArray code at runtime"

config TEST_RHASHTABLE
	tristate "Perform selftest on resizable hash table"
	help
	  Enable this option to test the rhashtable functions at boot.

	  If unsure, say N.

config TEST_SIPHASH
	tristate "Perform selftest on siphash functions"
	help
	  Enable this option to test the kernel's siphash (<linux/siphash.h>) hash
	  functions on boot (or module load).

	  This is intended to help people writing architecture-specific
	  optimized versions.  If unsure, say N.

config TEST_IDA
	tristate "Perform selftest on IDA functions"

config TEST_PARMAN
	tristate "Perform selftest on priority array manager"
	depends on PARMAN
	help
	  Enable this option to test priority array manager on boot
	  (or module load).

	  If unsure, say N.

config TEST_IRQ_TIMINGS
	bool "IRQ timings selftest"
	depends on IRQ_TIMINGS
	help
	  Enable this option to test the irq timings code on boot.

	  If unsure, say N.

config TEST_LKM
	tristate "Test module loading with 'hello world' module"
	depends on m
	help
	  This builds the "test_module" module that emits "Hello, world"
	  on printk when loaded. It is designed to be used for basic
	  evaluation of the module loading subsystem (for example when
	  validating module verification). It lacks any extra dependencies,
	  and will not normally be loaded by the system unless explicitly
	  requested by name.

	  If unsure, say N.

config TEST_BITOPS
	tristate "Test module for compilation of bitops operations"
	depends on m
	help
	  This builds the "test_bitops" module that is much like the
	  TEST_LKM module except that it does a basic exercise of the
	  set/clear_bit macros and get_count_order/long to make sure there are
	  no compiler warnings from C=1 sparse checker or -Wextra
	  compilations. It has no dependencies and doesn't run or load unless
	  explicitly requested by name.  for example: modprobe test_bitops.

	  If unsure, say N.

config TEST_VMALLOC
	tristate "Test module for stress/performance analysis of vmalloc allocator"
	default n
       depends on MMU
	depends on m
	help
	  This builds the "test_vmalloc" module that should be used for
	  stress and performance analysis. So, any new change for vmalloc
	  subsystem can be evaluated from performance and stability point
	  of view.

	  If unsure, say N.

config TEST_USER_COPY
	tristate "Test user/kernel boundary protections"
	depends on m
	help
	  This builds the "test_user_copy" module that runs sanity checks
	  on the copy_to/from_user infrastructure, making sure basic
	  user/kernel boundary testing is working. If it fails to load,
	  a regression has been detected in the user/kernel memory boundary
	  protections.

	  If unsure, say N.

config TEST_BPF
	tristate "Test BPF filter functionality"
	depends on m && NET
	help
	  This builds the "test_bpf" module that runs various test vectors
	  against the BPF interpreter or BPF JIT compiler depending on the
	  current setting. This is in particular useful for BPF JIT compiler
	  development, but also to run regression tests against changes in
	  the interpreter code. It also enables test stubs for eBPF maps and
	  verifier used by user space verifier testsuite.

	  If unsure, say N.

config TEST_BLACKHOLE_DEV
	tristate "Test blackhole netdev functionality"
	depends on m && NET
	help
	  This builds the "test_blackhole_dev" module that validates the
	  data path through this blackhole netdev.

	  If unsure, say N.

config FIND_BIT_BENCHMARK
	tristate "Test find_bit functions"
	help
	  This builds the "test_find_bit" module that measure find_*_bit()
	  functions performance.

	  If unsure, say N.

config TEST_FIRMWARE
	tristate "Test firmware loading via userspace interface"
	depends on FW_LOADER
	help
	  This builds the "test_firmware" module that creates a userspace
	  interface for testing firmware loading. This can be used to
	  control the triggering of firmware loading without needing an
	  actual firmware-using device. The contents can be rechecked by
	  userspace.

	  If unsure, say N.

config TEST_SYSCTL
	tristate "sysctl test driver"
	depends on PROC_SYSCTL
	help
	  This builds the "test_sysctl" module. This driver enables to test the
	  proc sysctl interfaces available to drivers safely without affecting
	  production knobs which might alter system functionality.

	  If unsure, say N.

config BITFIELD_KUNIT
	tristate "KUnit test bitfield functions at runtime" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Enable this option to test the bitfield functions at boot.

	  KUnit tests run during boot and output the results to the debug log
	  in TAP format (http://testanything.org/). Only useful for kernel devs
	  running the KUnit test harness, and not intended for inclusion into a
	  production build.

	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config HASH_KUNIT_TEST
	tristate "KUnit Test for integer hash functions" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Enable this option to test the kernel's string (<linux/stringhash.h>), and
	  integer (<linux/hash.h>) hash functions on boot.

	  KUnit tests run during boot and output the results to the debug log
	  in TAP format (https://testanything.org/). Only useful for kernel devs
	  running the KUnit test harness, and not intended for inclusion into a
	  production build.

	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  This is intended to help people writing architecture-specific
	  optimized versions. If unsure, say N.

config RESOURCE_KUNIT_TEST
	tristate "KUnit test for resource API" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the resource API unit test.
	  Tests the logic of API provided by resource.c and ioport.h.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config SYSCTL_KUNIT_TEST
	tristate "KUnit test for sysctl" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the proc sysctl unit test, which runs on boot.
	  Tests the API contract and implementation correctness of sysctl.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config LIST_KUNIT_TEST
	tristate "KUnit Test for Kernel Linked-list structures" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the linked list KUnit test suite.
	  It tests that the API and basic functionality of the list_head type
	  and associated macros.

	  KUnit tests run during boot and output the results to the debug log
	  in TAP format (https://testanything.org/). Only useful for kernel devs
	  running the KUnit test harness, and not intended for inclusion into a
	  production build.

	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config LINEAR_RANGES_TEST
	tristate "KUnit test for linear_ranges"
	depends on KUNIT
	select LINEAR_RANGES
	help
	  This builds the linear_ranges unit test, which runs on boot.
	  Tests the linear_ranges logic correctness.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config CMDLINE_KUNIT_TEST
	tristate "KUnit test for cmdline API" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the cmdline API unit test.
	  Tests the logic of API provided by cmdline.c.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config BITS_TEST
	tristate "KUnit test for bits.h" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds the bits unit test.
	  Tests the logic of macros defined in bits.h.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config SLUB_KUNIT_TEST
	tristate "KUnit test for SLUB cache error detection" if !KUNIT_ALL_TESTS
	depends on SLUB_DEBUG && KUNIT
	default KUNIT_ALL_TESTS
	help
	  This builds SLUB allocator unit test.
	  Tests SLUB cache debugging functionality.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config RATIONAL_KUNIT_TEST
	tristate "KUnit test for rational.c" if !KUNIT_ALL_TESTS
	depends on KUNIT && RATIONAL
	default KUNIT_ALL_TESTS
	help
	  This builds the rational math unit test.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config MEMCPY_KUNIT_TEST
	tristate "Test memcpy(), memmove(), and memset() functions at runtime" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Builds unit tests for memcpy(), memmove(), and memset() functions.
	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config OVERFLOW_KUNIT_TEST
	tristate "Test check_*_overflow() functions at runtime" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Builds unit tests for the check_*_overflow(), size_*(), allocation, and
	  related functions.

	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

config STACKINIT_KUNIT_TEST
	tristate "Test level of stack variable initialization" if !KUNIT_ALL_TESTS
	depends on KUNIT
	default KUNIT_ALL_TESTS
	help
	  Test if the kernel is zero-initializing stack variables and
	  padding. Coverage is controlled by compiler flags,
	  CONFIG_INIT_STACK_ALL_PATTERN, CONFIG_INIT_STACK_ALL_ZERO,
	  CONFIG_GCC_PLUGIN_STRUCTLEAK, CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF,
	  or CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL.

config TEST_UDELAY
	tristate "udelay test driver"
	help
	  This builds the "udelay_test" module that helps to make sure
	  that udelay() is working properly.

	  If unsure, say N.

config TEST_STATIC_KEYS
	tristate "Test static keys"
	depends on m
	help
	  Test the static key interfaces.

	  If unsure, say N.

config TEST_KMOD
	tristate "kmod stress tester"
	depends on m
	depends on NETDEVICES && NET_CORE && INET # for TUN
	depends on BLOCK
	depends on PAGE_SIZE_LESS_THAN_256KB # for BTRFS
	select TEST_LKM
	select XFS_FS
	select TUN
	select BTRFS_FS
	help
	  Test the kernel's module loading mechanism: kmod. kmod implements
	  support to load modules using the Linux kernel's usermode helper.
	  This test provides a series of tests against kmod.

	  Although technically you can either build test_kmod as a module or
	  into the kernel we disallow building it into the kernel since
	  it stress tests request_module() and this will very likely cause
	  some issues by taking over precious threads available from other
	  module load requests, ultimately this could be fatal.

	  To run tests run:

	  tools/testing/selftests/kmod/kmod.sh --help

	  If unsure, say N.

config TEST_DEBUG_VIRTUAL
	tristate "Test CONFIG_DEBUG_VIRTUAL feature"
	depends on DEBUG_VIRTUAL
	help
	  Test the kernel's ability to detect incorrect calls to
	  virt_to_phys() done against the non-linear part of the
	  kernel's virtual address map.

	  If unsure, say N.

config TEST_MEMCAT_P
	tristate "Test memcat_p() helper function"
	help
	  Test the memcat_p() helper for correctly merging two
	  pointer arrays together.

	  If unsure, say N.

config TEST_LIVEPATCH
	tristate "Test livepatching"
	default n
	depends on DYNAMIC_DEBUG
	depends on LIVEPATCH
	depends on m
	help
	  Test kernel livepatching features for correctness.  The tests will
	  load test modules that will be livepatched in various scenarios.

	  To run all the livepatching tests:

	  make -C tools/testing/selftests TARGETS=livepatch run_tests

	  Alternatively, individual tests may be invoked:

	  tools/testing/selftests/livepatch/test-callbacks.sh
	  tools/testing/selftests/livepatch/test-livepatch.sh
	  tools/testing/selftests/livepatch/test-shadow-vars.sh

	  If unsure, say N.

config TEST_OBJAGG
	tristate "Perform selftest on object aggreration manager"
	default n
	depends on OBJAGG
	help
	  Enable this option to test object aggregation manager on boot
	  (or module load).

config TEST_MEMINIT
	tristate "Test heap/page initialization"
	help
	  Test if the kernel is zero-initializing heap and page allocations.
	  This can be useful to test init_on_alloc and init_on_free features.

	  If unsure, say N.

config TEST_HMM
	tristate "Test HMM (Heterogeneous Memory Management)"
	depends on TRANSPARENT_HUGEPAGE
	depends on DEVICE_PRIVATE
	select HMM_MIRROR
	select MMU_NOTIFIER
	help
	  This is a pseudo device driver solely for testing HMM.
	  Say M here if you want to build the HMM test module.
	  Doing so will allow you to run tools/testing/selftest/vm/hmm-tests.

	  If unsure, say N.

config TEST_FREE_PAGES
	tristate "Test freeing pages"
	help
	  Test that a memory leak does not occur due to a race between
	  freeing a block of pages and a speculative page reference.
	  Loading this module is safe if your kernel has the bug fixed.
	  If the bug is not fixed, it will leak gigabytes of memory and
	  probably OOM your system.

config TEST_FPU
	tristate "Test floating point operations in kernel space"
	depends on X86 && !KCOV_INSTRUMENT_ALL
	help
	  Enable this option to add /sys/kernel/debug/selftest_helpers/test_fpu
	  which will trigger a sequence of floating point operations. This is used
	  for self-testing floating point control register setting in
	  kernel_fpu_begin().

	  If unsure, say N.

config TEST_CLOCKSOURCE_WATCHDOG
	tristate "Test clocksource watchdog in kernel space"
	depends on CLOCKSOURCE_WATCHDOG
	help
	  Enable this option to create a kernel module that will trigger
	  a test of the clocksource watchdog.  This module may be loaded
	  via modprobe or insmod in which case it will run upon being
	  loaded, or it may be built in, in which case it will run
	  shortly after boot.

	  If unsure, say N.

endif # RUNTIME_TESTING_MENU

config ARCH_USE_MEMTEST
	bool
	help
	  An architecture should select this when it uses early_memtest()
	  during boot process.

config MEMTEST
	bool "Memtest"
	depends on ARCH_USE_MEMTEST
	help
	  This option adds a kernel parameter 'memtest', which allows memtest
	  to be set and executed.
	        memtest=0, mean disabled; -- default
	        memtest=1, mean do 1 test pattern;
	        ...
	        memtest=17, mean do 17 test patterns.
	  If you are unsure how to answer this question, answer N.



config HYPERV_TESTING
	bool "Microsoft Hyper-V driver testing"
	default n
	depends on HYPERV && DEBUG_FS
	help
	  Select this option to enable Hyper-V vmbus testing.

endmenu # "Kernel Testing and Coverage"

source "Documentation/Kconfig"

endmenu # Kernel hacking
