diff options
| author | Nick Piggin <nickpiggin@yahoo.com.au> | 2004-10-18 18:15:02 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-10-18 18:15:02 -0700 |
| commit | 56beecf61af5a16dd2b72c157ac326e659f65aa2 (patch) | |
| tree | fd623fcb2cc0c19d224d606460fcd52c75f5cb15 | |
| parent | a9e96e12dbfd97bd9d42523e85f7d67a6ba9a643 (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.h | 1 | ||||
| -rw-r--r-- | kernel/panic.c | 6 | ||||
| -rw-r--r-- | mm/page_alloc.c | 1 |
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 |
