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
