summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Piggin <nickpiggin@yahoo.com.au>2004-10-18 18:15:02 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-10-18 18:15:02 -0700
commit56beecf61af5a16dd2b72c157ac326e659f65aa2 (patch)
treefd623fcb2cc0c19d224d606460fcd52c75f5cb15
parenta9e96e12dbfd97bd9d42523e85f7d67a6ba9a643 (diff)
[PATCH] taint on bad_page
Hugh and I both thought this would be generally useful. Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--include/linux/kernel.h1
-rw-r--r--kernel/panic.c6
-rw-r--r--mm/page_alloc.c1
3 files changed, 6 insertions, 2 deletions
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index f60ba2c96469..cf2f984e1b95 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -152,6 +152,7 @@ extern enum system_states {
#define TAINT_UNSAFE_SMP (1<<2)
#define TAINT_FORCED_RMMOD (1<<3)
#define TAINT_MACHINE_CHECK (1<<4)
+#define TAINT_BAD_PAGE (1<<5)
extern void dump_stack(void);
diff --git a/kernel/panic.c b/kernel/panic.c
index 6dddb56fbdad..c7ab9981c7aa 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -112,6 +112,7 @@ EXPORT_SYMBOL(panic);
* 'S' - SMP with CPUs not designed for SMP.
* 'R' - User forced a module unload.
* 'M' - Machine had a machine check experience.
+ * 'B' - System has hit bad_page.
*
* The string is overwritten by the next call to print_taint().
*/
@@ -120,12 +121,13 @@ const char *print_tainted(void)
{
static char buf[20];
if (tainted) {
- snprintf(buf, sizeof(buf), "Tainted: %c%c%c%c%c",
+ snprintf(buf, sizeof(buf), "Tainted: %c%c%c%c%c%c",
tainted & TAINT_PROPRIETARY_MODULE ? 'P' : 'G',
tainted & TAINT_FORCED_MODULE ? 'F' : ' ',
tainted & TAINT_UNSAFE_SMP ? 'S' : ' ',
tainted & TAINT_FORCED_RMMOD ? 'R' : ' ',
- tainted & TAINT_MACHINE_CHECK ? 'M' : ' ');
+ tainted & TAINT_MACHINE_CHECK ? 'M' : ' ',
+ tainted & TAINT_BAD_PAGE ? 'B' : ' ');
}
else
snprintf(buf, sizeof(buf), "Not tainted");
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index bd4e102ee22e..274a7af40a89 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -94,6 +94,7 @@ static void bad_page(const char *function, struct page *page)
set_page_count(page, 0);
reset_page_mapcount(page);
page->mapping = NULL;
+ tainted |= TAINT_BAD_PAGE;
}
#ifndef CONFIG_HUGETLB_PAGE