[igt-dev] [RFC PATCH i-g-t 6/6] lib/core: Use whitelist with kmsg filter

Chris Wilson chris at chris-wilson.co.uk
Wed Feb 21 15:32:57 UTC 2018


Quoting Petri Latvala (2018-02-21 15:19:35)
> dmesg messages of level >=warn don't result in an IGT_LOG_WARN if they
> match a whitelist regexp now.
> 
> The whitelist is not configureable without rebuilding, and it's not
> even possible to use a different whitelist for different drivers;
> launching the kmsg monitor happens way before opening the driver (if
> any).
> 
> Signed-off-by: Petri Latvala <petri.latvala at intel.com>
> ---
>  lib/igt_core.c | 21 ++++++++++++++++++++-
>  1 file changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/igt_core.c b/lib/igt_core.c
> index 5c93432d..d4495c3f 100644
> --- a/lib/igt_core.c
> +++ b/lib/igt_core.c
> @@ -55,6 +55,7 @@
>  #include <limits.h>
>  #include <locale.h>
>  #include <uwildmat/uwildmat.h>
> +#include <regex.h>
>  #ifdef HAVE_GLIB
>  #include <glib.h>
>  #endif
> @@ -581,6 +582,16 @@ static void oom_adjust_for_doom(void)
>  
>  }
>  
> +const char IGT_DMESG_WHITELIST[] =
static. No need to shout.

> +       "IRQ [0-9]+: no longer affine to CPU[0-9]+"

#define _ "|"

	"IRQ [0-9]+: no longer affine to CPU[0-9]+" _
	"IRQ fixup: irq [0-9]+ move in progress, old vector [0-9]+" _
	"Setting dangerous option [a-z_]+ - tainting kernel" _
	...

#undef _

?

> +       "|IRQ fixup: irq [0-9]+ move in progress, old vector [0-9]+"
> +       "|Setting dangerous option [a-z_]+ - tainting kernel"
> +       "|Suspending console\\(s\\) \\(use no_console_suspend to debug\\)"
> +       "|cache: parent cpu[0-9]+ should not be sleeping"
> +       "|hpet[0-9]+: lost [0-9]+ rtc interrupts"
> +       "|usb usb[0-9]+: root hub lost power or was reset"
> +       ;
> +
>  static void *kmsg_capture(void *arg)
>  {
>         /*
> @@ -593,6 +604,13 @@ static void *kmsg_capture(void *arg)
>         char *line = NULL;
>         size_t line_len = 0;
>         ssize_t read;
> +       regex_t re;
> +
> +       if (regcomp(&re, IGT_DMESG_WHITELIST, REG_EXTENDED | REG_NOSUB) != 0) {
> +               igt_warn("Cannot compile dmesg whitelist regexp\n");
> +               fclose(kmsg_file);
> +               return NULL;
> +       }
>  
>         while ((read = getline(&line, &line_len, kmsg_file))) {
>                 int s;
> @@ -613,7 +631,8 @@ static void *kmsg_capture(void *arg)
>                            &seq, &ts_usec, &continuation);
>  
>                 if (s == 4) {
> -                       if ((flags & 0x7) <= 4)
> +                       if ((flags & 0x7) <= 4 &&
> +                           regexec(&re, line, (size_t)0, NULL, 0))

regexec() == REG_NOMATCH to be clearer?
-Chris


More information about the igt-dev mailing list