- the mapping was obtained from this link: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=kernel...
Signed-off-by: Jakub Filak jfilak@redhat.com --- src/include/libabrt.h | 2 ++ src/lib/kernel.c | 81 +++++++++++++++++++++----------------------- src/plugins/abrt-dump-oops.c | 19 +++-------- 3 files changed, 45 insertions(+), 57 deletions(-)
diff --git a/src/include/libabrt.h b/src/include/libabrt.h index 48d2ac3..fae6143 100644 --- a/src/include/libabrt.h +++ b/src/include/libabrt.h @@ -79,6 +79,8 @@ int daemon_is_ok(); char *koops_extract_version(const char *line); #define kernel_tainted_short abrt_kernel_tainted_short char *kernel_tainted_short(const char *kernel_bt); +#define kernel_tainted_long abrt_kernel_tainted_long +char *kernel_tainted_long(const char *tainted_short); #define koops_hash_str abrt_koops_hash_str void koops_hash_str(char hash_str[SHA1_RESULT_LEN*2 + 1], char *oops_buf, const char *oops_ptr); #define koops_extract_oopses abrt_koops_extract_oopses diff --git a/src/lib/kernel.c b/src/lib/kernel.c index 9655296..90cdc15 100644 --- a/src/lib/kernel.c +++ b/src/lib/kernel.c @@ -555,56 +555,51 @@ char *kernel_tainted_short(const char *kernel_bt) return tnt; }
-#if 0 /* unused */ static const char *const tnts_long[] = { - "Proprietary module has been loaded.", - "Module has been forcibly loaded.", - "SMP with CPUs not designed for SMP.", - "User forced a module unload.", - "System experienced a machine check exception.", - "System has hit bad_page.", - "Userspace-defined naughtiness.", - "Kernel has oopsed before.", - "ACPI table overridden.", - "Taint on warning.", - "Modules from drivers/staging are loaded.", - "Working around severe firmware bug.", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "Hardware is unsupported.", - "Tech_preview", + /* A */ "ACPI table overridden.", + /* B */ "System has hit bad_page.", + /* C */ "Modules from drivers/staging are loaded.", + /* D */ "Kernel has oopsed before", + /* E */ NULL, + /* F */ "Module has been forcibly loaded.", + /* G */ "Proprietary module has not been loaded.", + /* H */ NULL, + /* I */ "Working around severe firmware bug.", + /* J */ NULL, + /* K */ NULL, + /* L */ NULL, + /* M */ "System experienced a machine check exception.", + /* N */ NULL, + /* O */ "Out-of-tree module has been loaded.", + /* P */ "Proprietary module has been loaded.", + /* Q */ NULL, + /* R */ "User forced a module unload.", + /* S */ "SMP with CPUs not designed for SMP.", + /* T */ NULL, + /* U */ "Userspace-defined naughtiness.", + /* V */ NULL, + /* W */ "Taint on warning.", + /* X */ NULL, + /* Y */ NULL, + /* Z */ NULL, };
-GList *kernel_tainted_long(unsigned tainted) +char *kernel_tainted_long(const char *tainted_short) { - int i = 0; - GList *tnt = NULL; - - while (tainted) + struct strbuf *tnt_long = strbuf_new(); + while (tainted_short[0] != '\0') { - if ((0x1 & tainted) && tnts_long[i]) - tnt = g_list_append(tnt, xstrdup(tnts_long[i])); + const int tnt_index = tainted_short[0] - 'A'; + if (tnt_index >= 0 && tnt_index <= 'Z' - 'A') + { + const char *const txt = tnts_long[tnt_index]; + if (txt) + strbuf_append_strf(tnt_long, "%s\n", txt); + }
- ++i; - tainted >>= 1; + ++tainted_short; }
- return tnt; + return strbuf_free_nobuf(tnt_long); } -#endif
diff --git a/src/plugins/abrt-dump-oops.c b/src/plugins/abrt-dump-oops.c index 29e74c5..be849b7 100644 --- a/src/plugins/abrt-dump-oops.c +++ b/src/plugins/abrt-dump-oops.c @@ -128,6 +128,11 @@ static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt) { VERB1 log("Kernel is tainted '%s'", tainted_short); dd_save_text(dd, FILENAME_TAINTED_SHORT, tainted_short); + + char *tnt_long = kernel_tainted_long(tainted_short); + dd_save_text(dd, FILENAME_TAINTED_LONG, tnt_long); + free(tnt_long); + const char *fmt = _("A kernel problem occurred, but your kernel has been " "tainted (flags:%s). Kernel maintainers are unable to " "diagnose tainted reports."); @@ -141,20 +146,6 @@ static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt) // kernel oops 1st line may look quite puzzling otherwise... strchrnul(second_line, '\n')[0] = '\0'; dd_save_text(dd, FILENAME_REASON, second_line); - -/* - GList *tainted_long = kernel_tainted_long(tainted); - - struct strbuf *tnt_long = strbuf_new(); - for (GList *li = tainted_long; li; li = li->next) - strbuf_append_strf(tnt_long, "%s\n", (char*) li->data); - - dd_save_text(dd, FILENAME_TAINTED, tainted_str); - dd_save_text(dd, FILENAME_TAINTED_SHORT, tainted_short); - dd_save_text(dd, FILENAME_TAINTED_LONG, tnt_long->buf); - strbuf_free(tnt_long); - list_free_with_free(tainted_long); -*/ dd_close(dd); } else