The smem-oom subtest can expectedly result in oom-killer being triggered,
which then dumps a call trace from a process that triggered it.  If that
happens to be a process that executes drm or i915 functions then the call
trace dump contains lines recognized by igt_runner running in piglit mode
as potential warnings.  If severity of the call trace dump messages is
NOTICE or higher, which isn't unlikely, then a dmesg-warn result is
reported despite successful completion of the subtest.

Fortunately, severity of those call trace dump messages depends on kernel
default log level which can be controlled from user space over sysctl.

To avoid false failure reports, relax kernel default log level to INFO so
those log lines are ignored by igt_runner in piglit mode at an expense of
call traces from real issues potentially detected by the subtest not
contributing to the igt_runner reported result.  Since those call traces
are still available to developers, only submitted with reduced severity,
that shouldn't hurt as long as the igt_runner still abandons further
execution and reports an abort result on a kernel taint.

Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493
Signed-off-by: Janusz Krzysztofik <[email protected]>
---
 tests/intel/gem_lmem_swapping.c | 40 ++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c
index adae26716c..ab951a7414 100644
--- a/tests/intel/gem_lmem_swapping.c
+++ b/tests/intel/gem_lmem_swapping.c
@@ -804,8 +804,9 @@ int igt_main_args("", long_options, help_str, opt_handler, 
NULL)
                { "parallel-random-verify-ccs", TEST_PARALLEL | TEST_RANDOM | 
TEST_CCS },
                { }
        };
+       int i915 = -1, console_log_level, default_log_level;
        const intel_ctx_t *ctx;
-       int i915 = -1;
+       FILE *printk;
 
        igt_fixture() {
                struct intel_execution_engine2 *e;
@@ -860,11 +861,48 @@ int igt_main_args("", long_options, help_str, 
opt_handler, NULL)
                        test_evict(i915, ctx, region, test->flags);
        }
 
+       /*
+        * The smem-oom subtest can result in oom-killer being triggered, which
+        * then dumps a call trace from a process that triggered it.  If that
+        * happens to be a process that executes drm or i915 functions then the
+        * call trace dump contains lines recognized by igt_runner as warnings
+        * and a dmesg-warn result is reported.  To avoid false failure reports,
+        * relax kernel default log level to INFO for those lines to be ignored
+        * by igt_runner in piglit mode, at an expense of call traces from
+        * potential real issues not contributing to the igt_runner reported
+        * result.  Since those call traces are still available to developers,
+        * only displayed with relaxed severity, that shouldn't hurt as long as
+        * igt_runner still abandons further execution and reports an abort
+        * result on a kernel taint.
+        */
+       igt_fixture() {
+               printk = fopen("/proc/sys/kernel/printk", "r+");
+               if (igt_debug_on(!printk))
+                       break;
+
+               if (!igt_debug_on(fscanf(printk, "%d %d",
+                                        &console_log_level, 
&default_log_level) != 2) &&
+                   default_log_level < 6) {
+                       rewind(printk);
+                       igt_debug_on(fprintf(printk, "%d 6", console_log_level) 
!= 3);
+               } else {
+                       fclose(printk);
+                       printk = NULL;
+               }
+       }
+
        igt_describe("Exercise local memory swapping during exhausting system 
memory");
        dynamic_lmem_subtest(region, regions, "smem-oom")
                test_smem_oom(i915, ctx, region);
 
        igt_fixture() {
+               if (printk) {
+                       rewind(printk);
+                       igt_debug_on(fprintf(printk, "%d %d",
+                                            console_log_level, 
default_log_level) != 3);
+                       fclose(printk);
+               }
+
                intel_allocator_multiprocess_stop();
                intel_ctx_destroy(i915, ctx);
                free(regions);
-- 
2.52.0

Reply via email to