Linux 6.13-rc1
[linux-2.6-microblaze.git] / lib / Kconfig.debug
index f4a1298..f3d7237 100644 (file)
@@ -97,7 +97,7 @@ config BOOT_PRINTK_DELAY
          using "boot_delay=N".
 
          It is likely that you would also need to use "lpj=M" to preset
-         the "loops per jiffie" value.
+         the "loops per jiffy" 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.
@@ -375,17 +375,19 @@ config DEBUG_INFO_SPLIT
          Incompatible with older versions of ccache.
 
 config DEBUG_INFO_BTF
-       bool "Generate BTF typeinfo"
+       bool "Generate BTF type information"
        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
+       depends on PAHOLE_VERSION >= 116
+       depends on DEBUG_INFO_DWARF4 || 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
-         DWARF type info into equivalent deduplicated BTF type info.
+         Turning this on requires pahole v1.16 or later (v1.21 or later to
+         support DWARF 5), which will convert DWARF type info into equivalent
+         deduplicated BTF type info.
 
 config PAHOLE_HAS_SPLIT_BTF
        def_bool PAHOLE_VERSION >= 119
@@ -408,7 +410,8 @@ config PAHOLE_HAS_LANG_EXCLUDE
          using DEBUG_INFO_BTF_MODULES.
 
 config DEBUG_INFO_BTF_MODULES
-       def_bool y
+       bool "Generate BTF type information for kernel modules"
+       default y
        depends on DEBUG_INFO_BTF && MODULES && PAHOLE_HAS_SPLIT_BTF
        help
          Generate compact split BTF type information for kernel modules.
@@ -570,6 +573,21 @@ config VMLINUX_MAP
          pieces of code get eliminated with
          CONFIG_LD_DEAD_CODE_DATA_ELIMINATION.
 
+config BUILTIN_MODULE_RANGES
+       bool "Generate address range information for builtin modules"
+       depends on !LTO
+       depends on VMLINUX_MAP
+       help
+        When modules are built into the kernel, there will be no module name
+        associated with its symbols in /proc/kallsyms.  Tracers may want to
+        identify symbols by module name and symbol name regardless of whether
+        the module is configured as loadable or not.
+
+        This option generates modules.builtin.ranges in the build tree with
+        offset ranges (per ELF section) for the module(s) they belong to.
+        It also records an anchor symbol to determine the load address of the
+        section.
+
 config DEBUG_FORCE_WEAK_PER_CPU
        bool "Force weak per-cpu definitions"
        depends on DEBUG_KERNEL
@@ -968,6 +986,38 @@ config DEBUG_STACKOVERFLOW
 
          If in doubt, say "N".
 
+config CODE_TAGGING
+       bool
+       select KALLSYMS
+
+config MEM_ALLOC_PROFILING
+       bool "Enable memory allocation profiling"
+       default n
+       depends on MMU
+       depends on PROC_FS
+       depends on !DEBUG_FORCE_WEAK_PER_CPU
+       select CODE_TAGGING
+       select PAGE_EXTENSION
+       select SLAB_OBJ_EXT
+       help
+         Track allocation source code and record total allocation size
+         initiated at that code location. The mechanism can be used to track
+         memory leaks with a low performance and memory impact.
+
+config MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT
+       bool "Enable memory allocation profiling by default"
+       default y
+       depends on MEM_ALLOC_PROFILING
+
+config MEM_ALLOC_PROFILING_DEBUG
+       bool "Memory allocation profiler debugging"
+       default n
+       depends on MEM_ALLOC_PROFILING
+       select MEM_ALLOC_PROFILING_ENABLED_BY_DEFAULT
+       help
+         Adds warnings with helpful error messages for memory allocation
+         profiling.
+
 source "lib/Kconfig.kasan"
 source "lib/Kconfig.kfence"
 source "lib/Kconfig.kmsan"
@@ -1011,7 +1061,9 @@ config PANIC_TIMEOUT
          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.
+         value n < 0 will reboot immediately. This setting can be overridden
+         with the kernel command line option panic=, and from userspace via
+         /proc/sys/kernel/panic.
 
 config LOCKUP_DETECTOR
        bool
@@ -1029,6 +1081,20 @@ config SOFTLOCKUP_DETECTOR
          chance to run.  The current stack trace is displayed upon
          detection and the system will stay locked up.
 
+config SOFTLOCKUP_DETECTOR_INTR_STORM
+       bool "Detect Interrupt Storm in Soft Lockups"
+       depends on SOFTLOCKUP_DETECTOR && IRQ_TIME_ACCOUNTING
+       select GENERIC_IRQ_STAT_SNAPSHOT
+       default y if NR_CPUS <= 128
+       help
+         Say Y here to enable the kernel to detect interrupt storm
+         during "soft lockups".
+
+         "soft lockups" can be caused by a variety of reasons. If one is
+         caused by an interrupt storm, then the storming interrupts will not
+         be on the callstack. To detect this case, it is necessary to report
+         the CPU stats and the interrupt counts during the "soft lockups".
+
 config BOOTPARAM_SOFTLOCKUP_PANIC
        bool "Panic (Reboot) On Soft Lockups"
        depends on SOFTLOCKUP_DETECTOR
@@ -1250,7 +1316,7 @@ config SCHED_INFO
 
 config SCHEDSTATS
        bool "Collect scheduler statistics"
-       depends on DEBUG_KERNEL && PROC_FS
+       depends on PROC_FS
        select SCHED_INFO
        help
          If you say Y here, additional code will be inserted into the
@@ -1263,19 +1329,6 @@ config SCHEDSTATS
 
 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
@@ -1344,22 +1397,14 @@ config PROVE_LOCKING
         For more details, see Documentation/locking/lockdep-design.rst.
 
 config PROVE_RAW_LOCK_NESTING
-       bool "Enable raw_spinlock - spinlock nesting checks"
+       bool
        depends on PROVE_LOCKING
-       default n
+       default y
        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
@@ -1467,7 +1512,7 @@ config LOCKDEP_BITS
 config LOCKDEP_CHAINS_BITS
        int "Bitsize for MAX_LOCKDEP_CHAINS"
        depends on LOCKDEP && !LOCKDEP_SMALL
-       range 10 30
+       range 10 21
        default 16
        help
          Try increasing this value if you hit "BUG: MAX_LOCKDEP_CHAINS too low!" message.
@@ -1566,6 +1611,7 @@ config SCF_TORTURE_TEST
 config CSD_LOCK_WAIT_DEBUG
        bool "Debugging for csd_lock_wait(), called from smp_call_function*()"
        depends on DEBUG_KERNEL
+       depends on SMP
        depends on 64BIT
        default n
        help
@@ -1839,7 +1885,7 @@ 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
+       default y if PPC || X86 || ARM64 || S390
        help
          If this option is disabled, you allow userspace (root) access to all
          of memory, including kernel and userspace memory. Accidental
@@ -2049,6 +2095,16 @@ config FAIL_SUNRPC
          Provide fault-injection capability for SunRPC and
          its consumers.
 
+config FAIL_SKB_REALLOC
+       bool "Fault-injection capability forcing skb to reallocate"
+       depends on FAULT_INJECTION_DEBUG_FS
+       help
+         Provide fault-injection capability that forces the skb to be
+         reallocated, catching possible invalid pointers to the skb.
+
+         For more information, check
+         Documentation/dev-tools/fault-injection/fault-injection.rst
+
 config FAULT_INJECTION_CONFIGFS
        bool "Configfs interface for fault-injection capabilities"
        depends on FAULT_INJECTION
@@ -2125,6 +2181,14 @@ config KCOV_IRQ_AREA_SIZE
          soft interrupts. This specifies the size of those areas in the
          number of unsigned long words.
 
+config KCOV_SELFTEST
+       bool "Perform short selftests on boot"
+       depends on KCOV
+       help
+         Run short KCOV coverage collection selftests on boot.
+         On test failure, causes the kernel to panic. Recommended to be
+         enabled, ensuring critical functionality works as intended.
+
 menuconfig RUNTIME_TESTING_MENU
        bool "Runtime Testing"
        default y
@@ -2205,6 +2269,7 @@ config TEST_LIST_SORT
 config TEST_MIN_HEAP
        tristate "Min heap test"
        depends on DEBUG_KERNEL || m
+       select MIN_HEAP
        help
          Enable this to turn on min heap function tests. This test is
          executed only once during system boot (so affects only boot time),
@@ -2232,6 +2297,16 @@ config TEST_DIV64
 
          If unsure, say N.
 
+config TEST_MULDIV64
+       tristate "mul_u64_u64_div_u64() test"
+       depends on DEBUG_KERNEL || m
+       help
+         Enable this to turn on 'mul_u64_u64_div_u64()' 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_IOV_ITER
        tristate "Test iov_iter operation" if !KUNIT_ALL_TESTS
        depends on KUNIT
@@ -2436,7 +2511,6 @@ config TEST_LKM
 
 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
@@ -2460,18 +2534,6 @@ config TEST_VMALLOC
 
          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
@@ -2558,6 +2620,23 @@ config CHECKSUM_KUNIT
 
          If unsure, say N.
 
+config UTIL_MACROS_KUNIT
+       tristate "KUnit test util_macros.h functions at runtime" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         Enable this option to test the util_macros.h function 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
@@ -2581,6 +2660,7 @@ config RESOURCE_KUNIT_TEST
        tristate "KUnit test for resource API" if !KUNIT_ALL_TESTS
        depends on KUNIT
        default KUNIT_ALL_TESTS
+       select GET_FREE_REGION
        help
          This builds the resource API unit test.
          Tests the logic of API provided by resource.c and ioport.h.
@@ -2703,18 +2783,6 @@ config MEMCPY_KUNIT_TEST
 
          If unsure, say N.
 
-config MEMCPY_SLOW_KUNIT_TEST
-       bool "Include exhaustive memcpy tests"
-       depends on MEMCPY_KUNIT_TEST
-       default y
-       help
-         Some memcpy tests are quite exhaustive in checking for overlaps
-         and bit ranges. These can be very slow, so they are split out
-         as a separate config, in case they need to be disabled.
-
-         Note this config option will be replaced by the use of KUnit test
-         attributes.
-
 config IS_SIGNED_TYPE_KUNIT_TEST
        tristate "Test is_signed_type() macro" if !KUNIT_ALL_TESTS
        depends on KUNIT
@@ -2770,16 +2838,6 @@ config HW_BREAKPOINT_KUNIT_TEST
 
          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
@@ -2791,6 +2849,24 @@ config SIPHASH_KUNIT_TEST
          This is intended to help people writing architecture-specific
          optimized versions.  If unsure, say N.
 
+config USERCOPY_KUNIT_TEST
+       tristate "KUnit Test for user/kernel boundary protections"
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         This builds the "usercopy_kunit" module that runs sanity checks
+         on the copy_to/from_user infrastructure, making sure basic
+         user/kernel boundary testing is working.
+
+config CRC16_KUNIT_TEST
+       tristate "KUnit tests for CRC16"
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       select CRC16
+       help
+         Enable this option to run unit tests for the kernel's CRC16
+         implementation (<linux/crc16.h>).
+
 config TEST_UDELAY
        tristate "udelay test driver"
        help
@@ -2844,6 +2920,141 @@ config TEST_KMOD
 
          If unsure, say N.
 
+config TEST_RUNTIME
+       bool
+
+config TEST_RUNTIME_MODULE
+       bool
+
+config TEST_KALLSYMS
+       tristate "module kallsyms find_symbol() test"
+       depends on m
+       select TEST_RUNTIME
+       select TEST_RUNTIME_MODULE
+       select TEST_KALLSYMS_A
+       select TEST_KALLSYMS_B
+       select TEST_KALLSYMS_C
+       select TEST_KALLSYMS_D
+       help
+         This allows us to stress test find_symbol() through the kallsyms
+         used to place symbols on the kernel ELF kallsyms and modules kallsyms
+         where we place kernel symbols such as exported symbols.
+
+         We have four test modules:
+
+         A: has KALLSYSMS_NUMSYMS exported symbols
+         B: uses one of A's symbols
+         C: adds KALLSYMS_SCALE_FACTOR * KALLSYSMS_NUMSYMS exported
+         D: adds 2 * the symbols than C
+
+         We stress test find_symbol() through two means:
+
+         1) Upon load of B it will trigger simplify_symbols() to look for the
+         one symbol it uses from the module A with tons of symbols. This is an
+         indirect way for us to have B call resolve_symbol_wait() upon module
+         load. This will eventually call find_symbol() which will eventually
+         try to find the symbols used with find_exported_symbol_in_section().
+         find_exported_symbol_in_section() uses bsearch() so a binary search
+         for each symbol. Binary search will at worst be O(log(n)) so the
+         larger TEST_MODULE_KALLSYSMS the worse the search.
+
+         2) The selftests should load C first, before B. Upon B's load towards
+         the end right before we call module B's init routine we get
+         complete_formation() called on the module. That will first check
+         for duplicate symbols with the call to verify_exported_symbols().
+         That is when we'll force iteration on module C's insane symbol list.
+         Since it has 10 * KALLSYMS_NUMSYMS it means we can first test
+         just loading B without C. The amount of time it takes to load C Vs
+         B can give us an idea of the impact growth of the symbol space and
+         give us projection. Module A only uses one symbol from B so to allow
+         this scaling in module C to be proportional, if it used more symbols
+         then the first test would be doing more and increasing just the
+         search space would be slightly different. The last module, module D
+         will just increase the search space by twice the number of symbols in
+         C so to allow for full projects.
+
+         tools/testing/selftests/module/find_symbol.sh
+
+         The current defaults will incur a build delay of about 7 minutes
+         on an x86_64 with only 8 cores. Enable this only if you want to
+         stress test find_symbol() with thousands of symbols. At the same
+         time this is also useful to test building modules with thousands of
+         symbols, and if BTF is enabled this also stress tests adding BTF
+         information for each module. Currently enabling many more symbols
+         will segfault the build system.
+
+         If unsure, say N.
+
+if TEST_KALLSYMS
+
+config TEST_KALLSYMS_A
+       tristate
+       depends on m
+
+config TEST_KALLSYMS_B
+       tristate
+       depends on m
+
+config TEST_KALLSYMS_C
+       tristate
+       depends on m
+
+config TEST_KALLSYMS_D
+       tristate
+       depends on m
+
+choice
+       prompt "Kallsym test range"
+       default TEST_KALLSYMS_LARGE
+       help
+         Selecting something other than "Fast" will enable tests which slow
+         down the build and may crash your build.
+
+config TEST_KALLSYMS_FAST
+       bool "Fast builds"
+       help
+         You won't really be testing kallsysms, so this just helps fast builds
+         when allmodconfig is used..
+
+config TEST_KALLSYMS_LARGE
+       bool "Enable testing kallsyms with large exports"
+       help
+         This will enable larger number of symbols. This will slow down
+         your build considerably.
+
+config TEST_KALLSYMS_MAX
+       bool "Known kallsysms limits"
+       help
+         This will enable exports to the point we know we'll start crashing
+         builds.
+
+endchoice
+
+config TEST_KALLSYMS_NUMSYMS
+       int "test kallsyms number of symbols"
+       range 2 10000
+       default 2 if TEST_KALLSYMS_FAST
+       default 100 if TEST_KALLSYMS_LARGE
+       default 10000 if TEST_KALLSYMS_MAX
+       help
+         The number of symbols to create on TEST_KALLSYMS_A, only one of which
+         module TEST_KALLSYMS_B will use. This also will be used
+         for how many symbols TEST_KALLSYMS_C will have, scaled up by
+         TEST_KALLSYMS_SCALE_FACTOR. Note that setting this to 10,000 will
+         trigger a segfault today, don't use anything close to it unless
+         you are aware that this should not be used for automated build tests.
+
+config TEST_KALLSYMS_SCALE_FACTOR
+       int "test kallsyms scale factor"
+       default 8
+       help
+         How many more unusued symbols will TEST_KALLSYSMS_C have than
+         TEST_KALLSYMS_A. If 8, then module C will have 8 * syms
+         than module A. Then TEST_KALLSYMS_D will have double the amount
+         of symbols than C so to allow projections.
+
+endif # TEST_KALLSYMS
+
 config TEST_DEBUG_VIRTUAL
        tristate "Test CONFIG_DEBUG_VIRTUAL feature"
        depends on DEBUG_VIRTUAL
@@ -2902,7 +3113,7 @@ config TEST_FREE_PAGES
 
 config TEST_FPU
        tristate "Test floating point operations in kernel space"
-       depends on X86 && !KCOV_INSTRUMENT_ALL
+       depends on ARCH_HAS_KERNEL_FPU_SUPPORT && !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
@@ -2934,6 +3145,22 @@ config TEST_OBJPOOL
 
          If unsure, say N.
 
+config INT_POW_TEST
+       tristate "Integer exponentiation (int_pow) test" if !KUNIT_ALL_TESTS
+       depends on KUNIT
+       default KUNIT_ALL_TESTS
+       help
+         This option enables the KUnit test suite for the int_pow function,
+         which performs integer exponentiation. The test suite is designed to
+         verify that the implementation of int_pow correctly computes the power
+         of a given base raised to a given exponent.
+
+         Enabling this option will include tests that check various scenarios
+         and edge cases to ensure the accuracy and reliability of the exponentiation
+         function.
+
+         If unsure, say N
+
 endif # RUNTIME_TESTING_MENU
 
 config ARCH_USE_MEMTEST
@@ -3001,7 +3228,7 @@ 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.
+         Controls how `build_error!` and `build_assert!` are handled during the 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.