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. v2: Move default log level setup inside subtest smem-oom (Kamil), - move cleanup there as well. Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493 Cc: Kamil Konieczny <[email protected]> Signed-off-by: Janusz Krzysztofik <[email protected]> --- tests/intel/gem_lmem_swapping.c | 51 +++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c index adae26716c..a8ffae19f1 100644 --- a/tests/intel/gem_lmem_swapping.c +++ b/tests/intel/gem_lmem_swapping.c @@ -861,8 +861,55 @@ int igt_main_args("", long_options, help_str, opt_handler, 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_subtest_with_dynamic("smem-oom") { + /* + * This 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. + */ + FILE *printk = fopen("/proc/sys/kernel/printk", "r+"); + int console_log_level, default_log_level; + unsigned int i; + + if (!igt_debug_on(!printk)) { + 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; + } + } + + for (i = 0; i < regions->num_regions; i++) { + region = ®ions->regions[i]; + if (region->region.memory_class == I915_MEMORY_CLASS_DEVICE) + igt_dynamic_f("lmem%u", region->region.memory_instance) + test_smem_oom(i915, ctx, region); + } + + if (printk) { + rewind(printk); + igt_debug_on(fprintf(printk, "%d %d", + console_log_level, + default_log_level) != 3); + fclose(printk); + } + } igt_fixture() { intel_allocator_multiprocess_stop(); -- 2.52.0
