On Thu, 13 Mar 2025 at 19:44, Alessandro Carminati <acarm...@redhat.com> wrote: > > Some unit tests intentionally trigger warning backtraces by passing bad > parameters to kernel API functions. Such unit tests typically check the > return value from such calls, not the existence of the warning backtrace. > > Such intentionally generated warning backtraces are neither desirable > nor useful for a number of reasons. > - They can result in overlooked real problems. > - A warning that suddenly starts to show up in unit tests needs to be > investigated and has to be marked to be ignored, for example by > adjusting filter scripts. Such filters are ad-hoc because there is > no real standard format for warnings. On top of that, such filter > scripts would require constant maintenance. > > One option to address problem would be to add messages such as "expected > warning backtraces start / end here" to the kernel log. However, that > would again require filter scripts, it might result in missing real > problematic warning backtraces triggered while the test is running, and > the irrelevant backtrace(s) would still clog the kernel log. > > Solve the problem by providing a means to identify and suppress specific > warning backtraces while executing test code. Support suppressing multiple > backtraces while at the same time limiting changes to generic code to the > absolute minimum. Architecture specific changes are kept at minimum by > retaining function names only if both CONFIG_DEBUG_BUGVERBOSE and > CONFIG_KUNIT are enabled. > > The first patch of the series introduces the necessary infrastructure. > The second patch introduces support for counting suppressed backtraces. > This capability is used in patch three to implement unit tests. > Patch four documents the new API. > The next two patches add support for suppressing backtraces in drm_rect > and dev_addr_lists unit tests. These patches are intended to serve as > examples for the use of the functionality introduced with this series. > The remaining patches implement the necessary changes for all > architectures with GENERIC_BUG support. > > With CONFIG_KUNIT enabled, image size increase with this series applied is > approximately 1%. The image size increase (and with it the functionality > introduced by this series) can be avoided by disabling > CONFIG_KUNIT_SUPPRESS_BACKTRACE. > > This series is based on the RFC patch and subsequent discussion at > https://patchwork.kernel.org/project/linux-kselftest/patch/02546e59-1afe-4b08-ba81-d94f3b691c9a@moroto.mountain/ > and offers a more comprehensive solution of the problem discussed there. > > Design note: > Function pointers are only added to the __bug_table section if both > CONFIG_KUNIT_SUPPRESS_BACKTRACE and CONFIG_DEBUG_BUGVERBOSE are enabled > to avoid image size increases if CONFIG_KUNIT is disabled. There would be > some benefits to adding those pointers all the time (reduced complexity, > ability to display function names in BUG/WARNING messages). That change, > if desired, can be made later. > > Checkpatch note: > Remaining checkpatch errors and warnings were deliberately ignored. > Some are triggered by matching coding style or by comments interpreted > as code, others by assembler macros which are disliked by checkpatch. > Suggestions for improvements are welcome. > > Changes since RFC: > - Introduced CONFIG_KUNIT_SUPPRESS_BACKTRACE > - Minor cleanups and bug fixes > - Added support for all affected architectures > - Added support for counting suppressed warnings > - Added unit tests using those counters > - Added patch to suppress warning backtraces in dev_addr_lists tests > > Changes since v1: > - Rebased to v6.9-rc1 > - Added Tested-by:, Acked-by:, and Reviewed-by: tags > [I retained those tags since there have been no functional changes] > - Introduced KUNIT_SUPPRESS_BACKTRACE configuration option, enabled by > default. > > Changes since v2: > - Rebased to v6.9-rc2 > - Added comments to drm warning suppression explaining why it is needed. > - Added patch to move conditional code in arch/sh/include/asm/bug.h > to avoid kerneldoc warning > - Added architecture maintainers to Cc: for architecture specific patches > - No functional changes > > Changes since v3: > - Rebased to v6.14-rc6 > - Dropped net: "kunit: Suppress lock warning noise at end of dev_addr_lists > tests" > since 3db3b62955cd6d73afde05a17d7e8e106695c3b9 > - Added __kunit_ and KUNIT_ prefixes. > - Tested on interessed architectures. > > ----
Sorry: I also thought this had already landed. I'm definitely in favour of us taking this, though agree that we definitely can't afford to break the s390x build. I've (re-)reviewed the early patches as well, and am generally acking the series (though some of the architecture-specific patches are definitely beyond my expertise to review fully). Acked-by: David Gow <david...@google.com> Cheers, -- David > Guenter Roeck (14): > bug/kunit: Core support for suppressing warning backtraces > kunit: bug: Count suppressed warning backtraces > kunit: Add test cases for backtrace warning suppression > kunit: Add documentation for warning backtrace suppression API > drm: Suppress intentional warning backtraces in scaling unit tests > x86: Add support for suppressing warning backtraces > arm64: Add support for suppressing warning backtraces > loongarch: Add support for suppressing warning backtraces > parisc: Add support for suppressing warning backtraces > s390: Add support for suppressing warning backtraces > sh: Add support for suppressing warning backtraces > sh: Move defines needed for suppressing warning backtraces > riscv: Add support for suppressing warning backtraces > powerpc: Add support for suppressing warning backtraces > > Documentation/dev-tools/kunit/usage.rst | 30 ++++++- > arch/arm64/include/asm/asm-bug.h | 27 ++++-- > arch/arm64/include/asm/bug.h | 8 +- > arch/loongarch/include/asm/bug.h | 42 +++++++--- > arch/parisc/include/asm/bug.h | 29 +++++-- > arch/powerpc/include/asm/bug.h | 37 +++++++-- > arch/riscv/include/asm/bug.h | 38 ++++++--- > arch/s390/include/asm/bug.h | 17 +++- > arch/sh/include/asm/bug.h | 28 ++++++- > arch/x86/include/asm/bug.h | 21 +++-- > drivers/gpu/drm/tests/drm_rect_test.c | 16 ++++ > include/asm-generic/bug.h | 16 +++- > include/kunit/bug.h | 56 +++++++++++++ > include/kunit/test.h | 1 + > include/linux/bug.h | 13 +++ > lib/bug.c | 51 +++++++++++- > lib/kunit/Kconfig | 9 ++ > lib/kunit/Makefile | 7 +- > lib/kunit/backtrace-suppression-test.c | 104 ++++++++++++++++++++++++ > lib/kunit/bug.c | 42 ++++++++++ > 20 files changed, 519 insertions(+), 73 deletions(-) > create mode 100644 include/kunit/bug.h > create mode 100644 lib/kunit/backtrace-suppression-test.c > create mode 100644 lib/kunit/bug.c > > -- > 2.34.1 >
smime.p7s
Description: S/MIME Cryptographic Signature