- the mapping was obtained from this link:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=ker...
Signed-off-by: Jakub Filak <jfilak(a)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
--
1.7.11.4