Hi Janusz, On 2026-01-13 at 16:59:36 +0100, Janusz Krzysztofik wrote: > 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. > > v3: Move cleanup to an exit handler in case we are killed (Kamil). > 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 | 61 +++++++++++++++++++++++++++++++-- > 1 file changed, 59 insertions(+), 2 deletions(-) > > diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c > index adae26716c..e68d318fd0 100644 > --- a/tests/intel/gem_lmem_swapping.c > +++ b/tests/intel/gem_lmem_swapping.c > @@ -661,6 +661,21 @@ static void gem_leak(int fd, uint64_t alloc) > gem_madvise(fd, handle, I915_MADV_DONTNEED); > } > > +static FILE *printk; > +static int console_log_level, default_log_level; > + > +static void printk_exit_handler(int sig) > +{ > + if (printk) { > + rewind(printk); > + igt_debug_on(fprintf(printk, "%d %d", > + console_log_level, > + default_log_level) != 3); > + fclose(printk); > + printk = NULL; > + } > +} > +
I would prefer just using write() with already prepared buf, not fprintf, as this is for at_exit path and should be fast, but this is maybe a matter of style. Reviewed-by: Kamil Konieczny <[email protected]> Regards, Kamil > static int *lmem_done; > > static void smem_oom_exit_handler(int sig) > @@ -861,8 +876,50 @@ 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") { > + unsigned int i; > + > + /* > + * 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. > + */ > + printk = fopen("/proc/sys/kernel/printk", "r+"); > + if (!igt_debug_on(!printk)) { > + if (!igt_debug_on(fscanf(printk, "%d %d", > + &console_log_level, > + &default_log_level) != 2) && > + default_log_level < 6) { > + igt_install_exit_handler(printk_exit_handler); > + > + 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); > + } > + > + printk_exit_handler(0); > + } > > igt_fixture() { > intel_allocator_multiprocess_stop(); > -- > 2.52.0 >
