From: Guenter Roeck <[email protected]> The drm_test_rect_calc_hscale and drm_test_rect_calc_vscale unit tests intentionally trigger warning backtraces by providing invalid parameters the tested functions. Suppress the backtraces to avoid clogging the kernel log and distracting from real problems.
The suppression API also exposes a warning counter, which is used to assert that the expected warning was actually triggered. On CONFIG_BUG=n, WARN_ON() is a no-op and the counter stays zero; the expected count is adjusted accordingly, preserving the return value check on all configurations. Tested-by: Linux Kernel Functional Testing <[email protected]> Acked-by: Dan Carpenter <[email protected]> Acked-by: MaĆra Canal <[email protected]> Cc: Maarten Lankhorst <[email protected]> Cc: David Airlie <[email protected]> Cc: Daniel Vetter <[email protected]> Signed-off-by: Guenter Roeck <[email protected]> Signed-off-by: Alessandro Carminati <[email protected]> Acked-by: David Gow <[email protected]> Signed-off-by: Albert Esteve <[email protected]> --- drivers/gpu/drm/tests/drm_rect_test.c | 36 +++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/tests/drm_rect_test.c b/drivers/gpu/drm/tests/drm_rect_test.c index 17e1f34b76101..5aa8ec5fc4d64 100644 --- a/drivers/gpu/drm/tests/drm_rect_test.c +++ b/drivers/gpu/drm/tests/drm_rect_test.c @@ -10,6 +10,7 @@ #include <drm/drm_rect.h> #include <drm/drm_mode.h> +#include <linux/limits.h> #include <linux/string_helpers.h> #include <linux/errno.h> @@ -407,10 +408,22 @@ KUNIT_ARRAY_PARAM(drm_rect_scale, drm_rect_scale_cases, drm_rect_scale_case_desc static void drm_test_rect_calc_hscale(struct kunit *test) { const struct drm_rect_scale_case *params = test->param_value; - int scaling_factor; + /* With CONFIG_BUG=n, WARN_ON() is a no-op so no warning fires. */ + int expected_warnings = IS_ENABLED(CONFIG_BUG) ? + (params->expected_scaling_factor == -EINVAL) : 0; + int scaling_factor = INT_MIN; - scaling_factor = drm_rect_calc_hscale(¶ms->src, ¶ms->dst, - params->min_range, params->max_range); + /* + * drm_rect_calc_hscale() generates a warning backtrace whenever bad + * parameters are passed to it. This affects unit tests with -EINVAL + * error code in expected_scaling_factor. + */ + kunit_warning_suppress(test) { + scaling_factor = drm_rect_calc_hscale(¶ms->src, ¶ms->dst, + params->min_range, + params->max_range); + KUNIT_EXPECT_SUPPRESSED_WARNING_COUNT(test, expected_warnings); + } KUNIT_EXPECT_EQ(test, scaling_factor, params->expected_scaling_factor); } @@ -418,10 +431,21 @@ static void drm_test_rect_calc_hscale(struct kunit *test) static void drm_test_rect_calc_vscale(struct kunit *test) { const struct drm_rect_scale_case *params = test->param_value; - int scaling_factor; + /* With CONFIG_BUG=n, WARN_ON() is a no-op so no warning fires. */ + int expected_warnings = IS_ENABLED(CONFIG_BUG) ? + (params->expected_scaling_factor == -EINVAL) : 0; + int scaling_factor = INT_MIN; - scaling_factor = drm_rect_calc_vscale(¶ms->src, ¶ms->dst, - params->min_range, params->max_range); + /* + * drm_rect_calc_vscale() generates a warning backtrace whenever bad + * parameters are passed to it. This affects unit tests with -EINVAL + * error code in expected_scaling_factor. + */ + kunit_warning_suppress(test) { + scaling_factor = drm_rect_calc_vscale(¶ms->src, ¶ms->dst, + params->min_range, params->max_range); + KUNIT_EXPECT_SUPPRESSED_WARNING_COUNT(test, expected_warnings); + } KUNIT_EXPECT_EQ(test, scaling_factor, params->expected_scaling_factor); } -- 2.53.0

