]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
firmware: cs_dsp: Simplify suppressing log messages during KUnit testing
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Tue, 10 Mar 2026 13:03:43 +0000 (13:03 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 10 Mar 2026 14:53:05 +0000 (14:53 +0000)
commit9be71d462c33b1a00acfa4ab8f0f5332ed592817
treeef2f62281d004d008c7ec160f395b5a79797a561
parent207fd1f4d84b7f073eaab556623bf4ad3a161f3f
firmware: cs_dsp: Simplify suppressing log messages during KUnit testing

Rework the way that kernel log messages are rate-limited or suppressed
while running the cs_dsp KUnit tests.

Under normal conditions cs_dsp doesn't produce an unreasonable number of
log messages, and state changes are relatively infrequent. But the KUnit
tests run through a very large number of test cases, especially error
cases, and this produces an unusually large amount of log output from
cs_dsp.

The original fix for this in commit 10db9f6899dd ("firmware: cs_dsp:
rate-limit log messages in KUnit builds") was effective but not pretty.
It involved different definitions of the log macros for KUnit and
not-KUnit builds, and exported variables for the KUnit tests to disable
log messages. I would have preferred to turn the log macros into real
functions that can contain a KUNIT_STATIC_STUB_REDIRECT(), but the
dev_xxx() macros don't have a version that take va_args, so they can't
be wrapped by a function.

This patch enables the use of a KUNIT_STATIC_STUB_REDIRECT() instead
of exported variables, and avoids the need for different definitions of
the debug macros in KUnit and not-KUnit builds.

- A new function cs_dsp_can_emit_message() returns true if the
  messages can be emitted to the kernel log. In a normal not-KUnit build
  this function collapses to simply returning true. In KUnit builds it
  will rate-limit output, and this uses a single static rate limiter so
  it limits the overall rate across all cs_dsp log messages. The KUnit
  test can redirect it to change the suppression behavior.

- The cs_dsp debug message macros are changed to only call the dev_xxx()
  if cs_dsp_can_emit_message() returns true. These are still macros so
  there is no problem wrapping the dev_xxx(). For a normal not-KUnit
  build cs_dsp_can_emit_message() always returns true so these macros
  simplify down to being identical to calling dev_xxx() directly.

- The KUnit tests that cause a lot of cs_dsp messages now redirect
  cs_dsp_can_emit_message() to a local function. This returns false
  to suppress cs_dsp messages, unless DEBUG is defined for that test.

I have checked that for a x86_64 production (non-KUnit) build the
disassembled cs_dsp.o is identical to what was generated from the
original code. So the complier is correctly simplifying the
cs_dsp_can_emit_message() and macros down to only the call to dev_xxx().

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20260310130343.1791951-1-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/firmware/cirrus/cs_dsp.c
drivers/firmware/cirrus/cs_dsp.h
drivers/firmware/cirrus/test/cs_dsp_test_bin.c
drivers/firmware/cirrus/test/cs_dsp_test_bin_error.c
drivers/firmware/cirrus/test/cs_dsp_test_wmfw.c
drivers/firmware/cirrus/test/cs_dsp_test_wmfw_error.c