Linux 6.9-rc1
[linux-2.6-microblaze.git] / lib / Kconfig.debug
index 072e4b2..c63a5fb 100644 (file)
@@ -231,6 +231,12 @@ config DEBUG_INFO
          in the "Debug information" choice below, indicating that debug
          information will be generated for build targets.
 
+# Clang generates .uleb128 with label differences for DWARF v5, a feature that
+# older binutils ports do not support when utilizing RISC-V style linker
+# relaxation: https://sourceware.org/bugzilla/show_bug.cgi?id=27215
+config AS_HAS_NON_CONST_ULEB128
+       def_bool $(as-instr,.uleb128 .Lexpr_end4 - .Lexpr_start3\n.Lexpr_start3:\n.Lexpr_end4:)
+
 choice
        prompt "Debug information"
        depends on DEBUG_KERNEL
@@ -253,6 +259,7 @@ config DEBUG_INFO_NONE
 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_ULEB128)
        help
          The implicit default version of DWARF debug info produced by a
          toolchain changes over time.
@@ -264,8 +271,10 @@ config DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
 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+ and gdb 7.0+.
+         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
@@ -274,7 +283,8 @@ config DEBUG_INFO_DWARF4
 config DEBUG_INFO_DWARF5
        bool "Generate DWARF Version 5 debuginfo"
        select DEBUG_INFO
-       depends on !CC_IS_CLANG || (CC_IS_CLANG && (AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502)))
+       depends on !ARCH_HAS_BROKEN_DWARF5
+       depends on !CC_IS_CLANG || AS_IS_LLVM || (AS_IS_GNU && AS_VERSION >= 23502 && AS_HAS_NON_CONST_ULEB128)
        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
@@ -304,8 +314,21 @@ config DEBUG_INFO_REDUCED
          DEBUG_INFO build and compile times are reduced too.
          Only works with newer gcc versions.
 
-config DEBUG_INFO_COMPRESSED
-       bool "Compressed debugging information"
+choice
+       prompt "Compressed Debug information"
+       help
+         Compress the resulting debug info. Results in smaller debug info sections,
+         but requires that consumers are able to decompress the results.
+
+         If unsure, choose DEBUG_INFO_COMPRESSED_NONE.
+
+config DEBUG_INFO_COMPRESSED_NONE
+       bool "Don't compress debug information"
+       help
+         Don't compress debug info sections.
+
+config DEBUG_INFO_COMPRESSED_ZLIB
+       bool "Compress debugging information with zlib"
        depends on $(cc-option,-gz=zlib)
        depends on $(ld-option,--compress-debug-sections=zlib)
        help
@@ -319,9 +342,26 @@ config DEBUG_INFO_COMPRESSED
          preferable to setting $KDEB_COMPRESS to "none" which would be even
          larger.
 
+config DEBUG_INFO_COMPRESSED_ZSTD
+       bool "Compress debugging information with zstd"
+       depends on $(cc-option,-gz=zstd)
+       depends on $(ld-option,--compress-debug-sections=zstd)
+       help
+         Compress the debug information using zstd.  This may provide better
+         compression than zlib, for about the same time costs, but requires newer
+         toolchain support.  Requires GCC 13.0+ or Clang 16.0+, binutils 2.40+, and
+         zstd.
+
+endchoice # "Compressed Debug information"
+
 config DEBUG_INFO_SPLIT
        bool "Produce split debuginfo in .dwo files"
        depends on $(cc-option,-gsplit-dwarf)
+       # RISC-V linker relaxation + -gsplit-dwarf has issues with LLVM and GCC
+       # prior to 12.x:
+       # https://github.com/llvm/llvm-project/issues/56642
+       # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99090
+       depends on !RISCV || GCC_VERSION >= 120000
        help
          Generate debug info into separate .dwo files. This significantly
          reduces the build directory size for builds with DEBUG_INFO,
@@ -340,6 +380,8 @@ config DEBUG_INFO_BTF
        depends on !GCC_PLUGIN_RANDSTRUCT || COMPILE_TEST
        depends on BPF_SYSCALL
        depends on !DEBUG_INFO_DWARF5 || PAHOLE_VERSION >= 121
+       # pahole uses elfutils, which does not have support for Hexagon relocations
+       depends on !HEXAGON
        help
          Generate deduplicated BTF type information from DWARF debug info.
          Turning this on expects presence of pahole tool, which will convert
@@ -356,6 +398,15 @@ config PAHOLE_HAS_BTF_TAG
          btf_decl_tag) or not. Currently only clang compiler implements
          these attributes, so make the config depend on CC_IS_CLANG.
 
+config PAHOLE_HAS_LANG_EXCLUDE
+       def_bool PAHOLE_VERSION >= 124
+       help
+         Support for the --lang_exclude flag which makes pahole exclude
+         compilation units from the supplied language. Used in Kbuild to
+         omit Rust CUs which are not supported in version 1.24 of pahole,
+         otherwise it would emit malformed kernel and module binaries when
+         using DEBUG_INFO_BTF_MODULES.
+
 config DEBUG_INFO_BTF_MODULES
        def_bool y
        depends on DEBUG_INFO_BTF && MODULES && PAHOLE_HAS_SPLIT_BTF
@@ -387,13 +438,15 @@ endif # DEBUG_INFO
 config FRAME_WARN
        int "Warn for stack frames larger than"
        range 0 8192
+       default 0 if KMSAN
        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.
+         Tell the compiler 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.
 
@@ -458,7 +511,8 @@ config SECTION_MISMATCH_WARN_ONLY
 
 config DEBUG_FORCE_FUNCTION_ALIGN_64B
        bool "Force all function address 64B aligned"
-       depends on EXPERT && (X86_64 || ARM64 || PPC32 || PPC64 || ARC)
+       depends on EXPERT && (X86_64 || ARM64 || PPC32 || PPC64 || ARC || RISCV || S390)
+       select FUNCTION_ALIGNMENT_64B
        help
          There are cases that a commit from one domain changes the function
          address alignment of other domains, and cause magic performance
@@ -707,81 +761,14 @@ config SHRINKER_DEBUG
          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
+       depends on DEBUG_KERNEL
        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.
+         Also emits a message to dmesg when a process exits if that process
+         used more stack space than previously exiting processes.
 
          This option will slow down process creation somewhat.
 
@@ -803,6 +790,9 @@ config ARCH_HAS_DEBUG_VM_PGTABLE
          An architecture should select this when it can successfully
          build and run DEBUG_VM_PGTABLE.
 
+config DEBUG_VM_IRQSOFF
+       def_bool DEBUG_VM && !PREEMPT_RT
+
 config DEBUG_VM
        bool "Debug VM"
        depends on DEBUG_KERNEL
@@ -812,13 +802,22 @@ config DEBUG_VM
 
          If unsure, say N.
 
-config DEBUG_VM_VMACACHE
-       bool "Debug VMA caching"
+config DEBUG_VM_SHOOT_LAZIES
+       bool "Debug MMU_LAZY_TLB_SHOOTDOWN implementation"
        depends on DEBUG_VM
+       depends on MMU_LAZY_TLB_SHOOTDOWN
        help
-         Enable this to turn on VMA caching debug information. Doing so
-         can cause significant overhead, so only enable it in non-production
-         environments.
+         Enable additional IPIs that ensure lazy tlb mm references are removed
+         before the mm is freed.
+
+         If unsure, say N.
+
+config DEBUG_VM_MAPLE_TREE
+       bool "Debug VM maple trees"
+       depends on DEBUG_VM
+       select DEBUG_MAPLE_TREE
+       help
+         Enable VM maple tree debugging information and extra validations.
 
          If unsure, say N.
 
@@ -971,6 +970,7 @@ config DEBUG_STACKOVERFLOW
 
 source "lib/Kconfig.kasan"
 source "lib/Kconfig.kfence"
+source "lib/Kconfig.kmsan"
 
 endmenu # "Memory Debugging"
 
@@ -1046,27 +1046,30 @@ config BOOTPARAM_SOFTLOCKUP_PANIC
 
          Say N if unsure.
 
-config HARDLOCKUP_DETECTOR_PERF
+config HAVE_HARDLOCKUP_DETECTOR_BUDDY
        bool
-       select SOFTLOCKUP_DETECTOR
+       depends on SMP
+       default y
 
 #
-# Enables a timestamp based low pass filter to compensate for perf based
-# hard lockup detection which runs too fast due to turbo modes.
+# Global switch whether to build a hardlockup detector at all. It is available
+# only when the architecture supports at least one implementation. There are
+# two exceptions. The hardlockup detector is never enabled on:
 #
-config HARDLOCKUP_CHECK_TIMESTAMP
-       bool
-
+#      s390: it reported many false positives there
 #
-# arch/ can define HAVE_HARDLOCKUP_DETECTOR_ARCH to provide their own hard
-# lockup detector rather than the perf based detector.
+#      sparc64: has a custom implementation which is not using the common
+#              hardlockup command line options and sysctl interface.
 #
 config HARDLOCKUP_DETECTOR
        bool "Detect Hard Lockups"
-       depends on DEBUG_KERNEL && !S390
-       depends on HAVE_HARDLOCKUP_DETECTOR_PERF || HAVE_HARDLOCKUP_DETECTOR_ARCH
+       depends on DEBUG_KERNEL && !S390 && !HARDLOCKUP_DETECTOR_SPARC64
+       depends on HAVE_HARDLOCKUP_DETECTOR_PERF || HAVE_HARDLOCKUP_DETECTOR_BUDDY || HAVE_HARDLOCKUP_DETECTOR_ARCH
+       imply HARDLOCKUP_DETECTOR_PERF
+       imply HARDLOCKUP_DETECTOR_BUDDY
+       imply 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.
@@ -1076,6 +1079,63 @@ config HARDLOCKUP_DETECTOR
          chance to run.  The current stack trace is displayed upon detection
          and the system will stay locked up.
 
+#
+# Note that arch-specific variants are always preferred.
+#
+config HARDLOCKUP_DETECTOR_PREFER_BUDDY
+       bool "Prefer the buddy CPU hardlockup detector"
+       depends on HARDLOCKUP_DETECTOR
+       depends on HAVE_HARDLOCKUP_DETECTOR_PERF && HAVE_HARDLOCKUP_DETECTOR_BUDDY
+       depends on !HAVE_HARDLOCKUP_DETECTOR_ARCH
+       help
+         Say Y here to prefer the buddy hardlockup detector over the perf one.
+
+         With the buddy detector, each CPU uses its softlockup hrtimer
+         to check that the next CPU is processing hrtimer interrupts by
+         verifying that a counter is increasing.
+
+         This hardlockup detector is useful on systems that don't have
+         an arch-specific hardlockup detector or if resources needed
+         for the hardlockup detector are better used for other things.
+
+config HARDLOCKUP_DETECTOR_PERF
+       bool
+       depends on HARDLOCKUP_DETECTOR
+       depends on HAVE_HARDLOCKUP_DETECTOR_PERF && !HARDLOCKUP_DETECTOR_PREFER_BUDDY
+       depends on !HAVE_HARDLOCKUP_DETECTOR_ARCH
+       select HARDLOCKUP_DETECTOR_COUNTS_HRTIMER
+
+config HARDLOCKUP_DETECTOR_BUDDY
+       bool
+       depends on HARDLOCKUP_DETECTOR
+       depends on HAVE_HARDLOCKUP_DETECTOR_BUDDY
+       depends on !HAVE_HARDLOCKUP_DETECTOR_PERF || HARDLOCKUP_DETECTOR_PREFER_BUDDY
+       depends on !HAVE_HARDLOCKUP_DETECTOR_ARCH
+       select HARDLOCKUP_DETECTOR_COUNTS_HRTIMER
+
+config HARDLOCKUP_DETECTOR_ARCH
+       bool
+       depends on HARDLOCKUP_DETECTOR
+       depends on HAVE_HARDLOCKUP_DETECTOR_ARCH
+       help
+         The arch-specific implementation of the hardlockup detector will
+         be used.
+
+#
+# Both the "perf" and "buddy" hardlockup detectors count hrtimer
+# interrupts. This config enables functions managing this common code.
+#
+config HARDLOCKUP_DETECTOR_COUNTS_HRTIMER
+       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
+
 config BOOTPARAM_HARDLOCKUP_PANIC
        bool "Panic (Reboot) On Hard Lockups"
        depends on HARDLOCKUP_DETECTOR
@@ -1145,6 +1205,19 @@ config WQ_WATCHDOG
          state.  This can be configured through kernel parameter
          "workqueue.watchdog_thresh" and its sysfs counterpart.
 
+config WQ_CPU_INTENSIVE_REPORT
+       bool "Report per-cpu work items which hog CPU for too long"
+       depends on DEBUG_KERNEL
+       help
+         Say Y here to enable reporting of concurrency-managed per-cpu work
+         items that hog CPUs for longer than
+         workqueue.cpu_intensive_thresh_us. Workqueue automatically
+         detects and excludes them from concurrency management to prevent
+         them from stalling other per-cpu work items. Occassional
+         triggering may not necessarily indicate a problem. Repeated
+         triggering likely indicates that the work item should be switched
+         to use an unbound workqueue.
+
 config TEST_LOCKUP
        tristate "Test module to generate lockups"
        depends on m
@@ -1164,10 +1237,10 @@ menu "Scheduler Debugging"
 
 config SCHED_DEBUG
        bool "Collect scheduler debugging info"
-       depends on DEBUG_KERNEL && PROC_FS
+       depends on DEBUG_KERNEL && DEBUG_FS
        default y
        help
-         If you say Y here, the /proc/sched_debug file will be provided
+         If you say Y here, the /sys/kernel/debug/sched file will be provided
          that can help debug the scheduler. The runtime overhead of this
          option is minimal.
 
@@ -1206,13 +1279,16 @@ config DEBUG_TIMEKEEPING
 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.
 
+         This option has potential to introduce high runtime overhead,
+         depending on workload as it triggers debugging routines for each
+         this_cpu operation. It should only be used for debugging purposes.
+
 menu "Lock Debugging (spinlocks, mutexes, etc...)"
 
 config LOCK_DEBUGGING_SUPPORT
@@ -1227,7 +1303,7 @@ config PROVE_LOCKING
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES if !PREEMPT_RT
        select DEBUG_RT_MUTEXES if RT_MUTEXES
-       select DEBUG_RWSEMS
+       select DEBUG_RWSEMS if !PREEMPT_RT
        select DEBUG_WW_MUTEX_SLOWPATH
        select DEBUG_LOCK_ALLOC
        select PREEMPT_COUNT if !ARCH_NO_PREEMPT
@@ -1350,7 +1426,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
 
 config DEBUG_RWSEMS
        bool "RW Semaphore debugging: basic checks"
-       depends on DEBUG_KERNEL
+       depends on DEBUG_KERNEL && !PREEMPT_RT
        help
          This debugging feature allows mismatched rw semaphore locks
          and unlocks to be detected and reported.
@@ -1410,7 +1486,7 @@ config LOCKDEP_STACK_TRACE_HASH_BITS
        range 10 30
        default 14
        help
-         Try increasing this value if you need large MAX_STACK_TRACE_ENTRIES.
+         Try increasing this value if you need large STACK_TRACE_HASH_SIZE.
 
 config LOCKDEP_CIRCULAR_QUEUE_BITS
        int "Bitsize for elements in circular_queue struct"
@@ -1498,6 +1574,15 @@ config CSD_LOCK_WAIT_DEBUG
          include the IPI handler function currently executing (if any)
          and relevant stack traces.
 
+config CSD_LOCK_WAIT_DEBUG_DEFAULT
+       bool "Default csd_lock_wait() debugging on at boot time"
+       depends on CSD_LOCK_WAIT_DEBUG
+       depends on 64BIT
+       default n
+       help
+         This option causes the csdlock_debug= kernel boot parameter to
+         default to 1 (basic debugging) instead of 0 (no debugging).
+
 endmenu # lock debugging
 
 config TRACE_IRQFLAGS
@@ -1512,6 +1597,17 @@ config TRACE_IRQFLAGS_NMI
        depends on TRACE_IRQFLAGS
        depends on TRACE_IRQFLAGS_NMI_SUPPORT
 
+config NMI_CHECK_CPU
+       bool "Debugging for CPUs failing to respond to backtrace requests"
+       depends on DEBUG_KERNEL
+       depends on X86
+       default n
+       help
+         Enables debug prints when a CPU fails to respond to a given
+         backtrace NMI.  These prints provide some reasons why a CPU
+         might legitimately be failing to respond, for example, if it
+         is offline of if ignore_nmis is set.
+
 config DEBUG_IRQFLAGS
        bool "Debug IRQ flag manipulation"
        help
@@ -1588,10 +1684,15 @@ menu "Debug kernel data structures"
 
 config DEBUG_LIST
        bool "Debug linked list manipulation"
-       depends on DEBUG_KERNEL || BUG_ON_DATA_CORRUPTION
+       depends on DEBUG_KERNEL
+       select LIST_HARDENED
        help
-         Enable this to turn on extended checks in the linked-list
-         walking routines.
+         Enable this to turn on extended checks in the linked-list walking
+         routines.
+
+         This option trades better quality error reports for performance, and
+         is more suitable for kernel debugging. If you care about performance,
+         you should only enable CONFIG_LIST_HARDENED instead.
 
          If unsure, say N.
 
@@ -1625,33 +1726,25 @@ config DEBUG_NOTIFIERS
          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
+config DEBUG_CLOSURES
+       bool "Debug closures (bcache async widgits)"
+       depends on CLOSURES
+       select DEBUG_FS
        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
+         Keeps all active closures in a linked list and provides a debugfs
+         interface to list them, which makes it possible to see asynchronous
+         operations that get stuck.
 
-config DEBUG_CREDENTIALS
-       bool "Debug credential management"
+config DEBUG_MAPLE_TREE
+       bool "Debug maple trees"
        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.
+         Enable maple tree debugging information and extra validations.
 
          If unsure, say N.
 
+endmenu
+
 source "kernel/rcu/Kconfig.debug"
 
 config DEBUG_WQ_FORCE_RR_CPU
@@ -1696,6 +1789,16 @@ config LATENCYTOP
          Enable this option if you want to use the LatencyTOP tool
          to find out which userspace is blocking on what kernel operations.
 
+config DEBUG_CGROUP_REF
+       bool "Disable inlining of cgroup css reference count functions"
+       depends on DEBUG_KERNEL
+       depends on CGROUPS
+       depends on KPROBES
+       default n
+       help
+         Force cgroup css reference count functions to not be inlined so
+         that they can be kprobed for debugging.
+
 source "kernel/trace/Kconfig"
 
 config PROVIDE_OHCI1394_DMA_INIT
@@ -1854,8 +1957,14 @@ config NETDEV_NOTIFIER_ERROR_INJECT
          If unsure, say N.
 
 config FUNCTION_ERROR_INJECTION
-       def_bool y
+       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 these functions. This is useful to test error paths of code.
+
+         If unsure, say N
 
 config FAULT_INJECTION
        bool "Fault-injection framework"
@@ -1867,7 +1976,6 @@ config 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.
 
@@ -1941,10 +2049,21 @@ config FAIL_SUNRPC
          Provide fault-injection capability for SunRPC and
          its consumers.
 
+config FAULT_INJECTION_CONFIGFS
+       bool "Configfs interface for fault-injection capabilities"
+       depends on FAULT_INJECTION
+       select CONFIGFS_FS
+       help
+         This option allows configfs-based drivers to dynamically configure
+         fault-injection via configfs.  Each parameter for driver-specific
+         fault-injection can be made visible as a configfs attribute in a
+         configfs group.
+
+
 config FAULT_INJECTION_STACKTRACE_FILTER
        bool "stacktrace filter for fault-injection capabilities"
-       depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
-       depends on !X86_64
+       depends on FAULT_INJECTION
+       depends on (FAULT_INJECTION_DEBUG_FS || FAULT_INJECTION_CONFIGFS) && STACKTRACE_SUPPORT
        select STACKTRACE
        depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86
        help
@@ -1966,7 +2085,7 @@ config KCOV
        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
+                  GCC_VERSION >= 120000 || CC_IS_CLANG
        select DEBUG_FS
        select GCC_PLUGIN_SANCOV if !CC_HAS_SANCOV_TRACE_PC
        select OBJTOOL if HAVE_NOINSTR_HACK
@@ -1974,10 +2093,6 @@ config KCOV
          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
@@ -2012,10 +2127,45 @@ config KCOV_IRQ_AREA_SIZE
 
 menuconfig RUNTIME_TESTING_MENU
        bool "Runtime Testing"
-       def_bool y
+       default y
 
 if RUNTIME_TESTING_MENU
 
+config TEST_DHRY
+       tristate "Dhrystone benchmark test"
+       help
+         Enable this to include the Dhrystone 2.1 benchmark.  This test
+         calculates the number of Dhrystones per second, and the number of
+         DMIPS (Dhrystone MIPS) obtained when the Dhrystone score is divided
+         by 1757 (the number of Dhrystones per second obtained on the VAX
+         11/780, nominally a 1 MIPS machine).
+
+         To run the benchmark, it needs to be enabled explicitly, either from
+         the kernel command line (when built-in), or from userspace (when
+         built-in or modular).
+
+         Run once during kernel boot:
+
+             test_dhry.run
+
+         Set number of iterations from kernel command line:
+
+             test_dhry.iterations=<n>
+
+         Set number of iterations from userspace:
+
+             echo <n> > /sys/module/test_dhry/parameters/iterations
+
+         Trigger manual run from userspace:
+
+             echo y > /sys/module/test_dhry/parameters/run
+
+         If the number of iterations is <= 0, the test will devise a suitable
+         number of iterations (test runs for at least 2s) automatically.
+         This process takes ca. 4s.
+
+         If unsure, say N.
+
 config LKDTM
        tristate "Linux Kernel Dump Test Tool Module"
        depends on DEBUG_FS
@@ -2029,13 +2179,16 @@ config LKDTM
        Documentation on how to use the module can be found in
        Documentation/fault-injection/provoke-crashes.rst
 
-config TEST_CPUMASK
-       tristate "cpumask tests" if !KUNIT_ALL_TESTS
+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
@@ -2079,11 +2232,24 @@ config TEST_DIV64
 
          If unsure, say N.
 
+config TEST_IOV_ITER
+       tristate "Test iov_iter operation" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       depends on MMU
+       default KUNIT_ALL_TESTS
+       help
+         Enable this to turn on testing of the operation of the I/O iterator
+         (iov_iter). 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
@@ -2187,14 +2353,15 @@ config ASYNC_RAID6_TEST
 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 STRING_KUNIT_TEST
+       tristate "KUnit test string functions at runtime" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
 
-config TEST_STRSCPY
-       tristate "Test strscpy*() family of functions at runtime"
+config STRING_HELPERS_KUNIT_TEST
+       tristate "KUnit test string helpers at runtime" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
 
 config TEST_KSTRTOX
        tristate "Test kstrto*() family of functions at runtime"
@@ -2218,21 +2385,21 @@ config TEST_UUID
 config TEST_XARRAY
        tristate "Test the XArray code at runtime"
 
-config TEST_RHASHTABLE
-       tristate "Perform selftest on resizable hash table"
+config TEST_MAPLE_TREE
+       tristate "Test the Maple Tree code at runtime or module load"
        help
-         Enable this option to test the rhashtable functions at boot.
+         Enable this option to test the maple tree code functions at boot, or
+         when the module is loaded. Enable "Debug Maple Trees" will enable
+         more verbose output on failures.
 
          If unsure, say N.
 
-config TEST_SIPHASH
-       tristate "Perform selftest on siphash functions"
+config TEST_RHASHTABLE
+       tristate "Perform selftest on resizable hash table"
        help
-         Enable this option to test the kernel's siphash (<linux/siphash.h>) hash
-         functions on boot (or module load).
+         Enable this option to test the rhashtable functions at boot.
 
-         This is intended to help people writing architecture-specific
-         optimized versions.  If unsure, say N.
+         If unsure, say N.
 
 config TEST_IDA
        tristate "Perform selftest on IDA functions"
@@ -2374,6 +2541,23 @@ config BITFIELD_KUNIT
 
          If unsure, say N.
 
+config CHECKSUM_KUNIT
+       tristate "KUnit test checksum functions at runtime" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         Enable this option to test the checksum 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
@@ -2436,6 +2620,19 @@ config LIST_KUNIT_TEST
 
          If unsure, say N.
 
+config HASHTABLE_KUNIT_TEST
+       tristate "KUnit Test for Kernel Hashtable structures" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         This builds the hashtable KUnit test suite.
+         It tests the basic functionality of the API defined in
+         include/linux/hashtable.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 LINEAR_RANGES_TEST
        tristate "KUnit test for linear_ranges"
        depends on KUNIT
@@ -2506,6 +2703,18 @@ config MEMCPY_KUNIT_TEST
 
          If unsure, say N.
 
+config IS_SIGNED_TYPE_KUNIT_TEST
+       tristate "Test is_signed_type() macro" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         Builds unit tests for the is_signed_type() macro.
+
+         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
@@ -2530,6 +2739,46 @@ config STACKINIT_KUNIT_TEST
          CONFIG_GCC_PLUGIN_STRUCTLEAK, CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF,
          or CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL.
 
+config FORTIFY_KUNIT_TEST
+       tristate "Test fortified str*() and mem*() function internals at runtime" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         Builds unit tests for checking internals of FORTIFY_SOURCE as used
+         by the str*() and mem*() family of functions. For testing runtime
+         traps of FORTIFY_SOURCE, see LKDTM's "FORTIFY_*" tests.
+
+config HW_BREAKPOINT_KUNIT_TEST
+       bool "Test hw_breakpoint constraints accounting" if !KUNIT_ALL_TESTS
+       depends on HAVE_HW_BREAKPOINT
+       depends on KUNIT=y
+       default KUNIT_ALL_TESTS
+       help
+         Tests for hw_breakpoint constraints accounting.
+
+         If unsure, say N.
+
+config STRCAT_KUNIT_TEST
+       tristate "Test strcat() family of functions at runtime" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+
+config STRSCPY_KUNIT_TEST
+       tristate "Test strscpy*() family of functions at runtime" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+
+config SIPHASH_KUNIT_TEST
+       tristate "Perform selftest on siphash functions" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       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_UDELAY
        tristate "udelay test driver"
        help
@@ -2546,6 +2795,16 @@ config TEST_STATIC_KEYS
 
          If unsure, say N.
 
+config TEST_DYNAMIC_DEBUG
+       tristate "Test DYNAMIC_DEBUG"
+       depends on DYNAMIC_DEBUG
+       help
+         This module registers a tracer callback to count enabled
+         pr_debugs in a 'do_debugging' function, then alters their
+         enablements, calls the function, and compares counts.
+
+         If unsure, say N.
+
 config TEST_KMOD
        tristate "kmod stress tester"
        depends on m
@@ -2591,28 +2850,6 @@ config TEST_MEMCAT_P
 
          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
@@ -2674,6 +2911,17 @@ config TEST_CLOCKSOURCE_WATCHDOG
 
          If unsure, say N.
 
+config TEST_OBJPOOL
+       tristate "Test module for correctness and stress of objpool"
+       default n
+       depends on m && DEBUG_KERNEL
+       help
+         This builds the "test_objpool" module that should be used for
+         correctness verification and concurrent testings of objects
+         allocation and reclamation.
+
+         If unsure, say N.
+
 endif # RUNTIME_TESTING_MENU
 
 config ARCH_USE_MEMTEST
@@ -2705,6 +2953,67 @@ config HYPERV_TESTING
 
 endmenu # "Kernel Testing and Coverage"
 
-source "Documentation/Kconfig"
+menu "Rust hacking"
+
+config RUST_DEBUG_ASSERTIONS
+       bool "Debug assertions"
+       depends on RUST
+       help
+         Enables rustc's `-Cdebug-assertions` codegen option.
+
+         This flag lets you turn `cfg(debug_assertions)` conditional
+         compilation on or off. This can be used to enable extra debugging
+         code in development but not in production. For example, it controls
+         the behavior of the standard library's `debug_assert!` macro.
+
+         Note that this will apply to all Rust code, including `core`.
+
+         If unsure, say N.
+
+config RUST_OVERFLOW_CHECKS
+       bool "Overflow checks"
+       default y
+       depends on RUST
+       help
+         Enables rustc's `-Coverflow-checks` codegen option.
+
+         This flag allows you to control the behavior of runtime integer
+         overflow. When overflow-checks are enabled, a Rust panic will occur
+         on overflow.
+
+         Note that this will apply to all Rust code, including `core`.
+
+         If unsure, say Y.
+
+config RUST_BUILD_ASSERT_ALLOW
+       bool "Allow unoptimized build-time assertions"
+       depends on RUST
+       help
+         Controls how are `build_error!` and `build_assert!` handled during build.
+
+         If calls to them exist in the binary, it may indicate a violated invariant
+         or that the optimizer failed to verify the invariant during compilation.
+
+         This should not happen, thus by default the build is aborted. However,
+         as an escape hatch, you can choose Y here to ignore them during build
+         and let the check be carried at runtime (with `panic!` being called if
+         the check fails).
+
+         If unsure, say N.
+
+config RUST_KERNEL_DOCTESTS
+       bool "Doctests for the `kernel` crate" if !KUNIT_ALL_TESTS
+       depends on RUST && KUNIT=y
+       default KUNIT_ALL_TESTS
+       help
+         This builds the documentation tests of the `kernel` crate
+         as KUnit tests.
+
+         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.
+
+endmenu # "Rust"
 
 endmenu # Kernel hacking