2011-10-26 22:23:52 +00:00
|
|
|
From 77c78bac236c7b07d390be65f357c85a79cce890 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Dave Jones <davej@redhat.com>
|
|
|
|
Date: Wed, 26 Oct 2011 18:44:26 -0400
|
|
|
|
Subject: [PATCH] Add more debugging information to the VM subsystem
|
|
|
|
|
|
|
|
Dump modules in bad_page, and print taint information in other areas
|
|
|
|
---
|
|
|
|
mm/page_alloc.c | 1 +
|
|
|
|
mm/slab.c | 8 ++++----
|
|
|
|
mm/slub.c | 2 +-
|
|
|
|
3 files changed, 6 insertions(+), 5 deletions(-)
|
|
|
|
|
2011-07-22 01:01:32 +00:00
|
|
|
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
2011-10-26 22:23:52 +00:00
|
|
|
index 6e8ecb6..83a0205 100644
|
2011-07-22 01:01:32 +00:00
|
|
|
--- a/mm/page_alloc.c
|
|
|
|
+++ b/mm/page_alloc.c
|
|
|
|
@@ -318,6 +318,7 @@ static void bad_page(struct page *page)
|
|
|
|
current->comm, page_to_pfn(page));
|
|
|
|
dump_page(page);
|
2010-07-29 23:46:31 +00:00
|
|
|
|
2011-07-22 01:01:32 +00:00
|
|
|
+ print_modules();
|
|
|
|
dump_stack();
|
|
|
|
out:
|
|
|
|
/* Leave bad fields for debug, except PageBuddy could make trouble */
|
2010-07-29 23:46:31 +00:00
|
|
|
diff --git a/mm/slab.c b/mm/slab.c
|
2011-10-26 22:23:52 +00:00
|
|
|
index 708efe8..114a66d 100644
|
2010-07-29 23:46:31 +00:00
|
|
|
--- a/mm/slab.c
|
|
|
|
+++ b/mm/slab.c
|
2011-10-26 22:23:52 +00:00
|
|
|
@@ -1927,8 +1927,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp)
|
2010-07-29 23:46:31 +00:00
|
|
|
/* Print header */
|
|
|
|
if (lines == 0) {
|
|
|
|
printk(KERN_ERR
|
|
|
|
- "Slab corruption: %s start=%p, len=%d\n",
|
|
|
|
- cachep->name, realobj, size);
|
|
|
|
+ "Slab corruption (%s): %s start=%p, len=%d\n",
|
|
|
|
+ print_tainted(), cachep->name, realobj, size);
|
|
|
|
print_objinfo(cachep, objp, 0);
|
|
|
|
}
|
|
|
|
/* Hexdump the affected line */
|
2011-10-26 22:23:52 +00:00
|
|
|
@@ -3037,8 +3037,8 @@ static void check_slabp(struct kmem_cache *cachep, struct slab *slabp)
|
2010-07-29 23:46:31 +00:00
|
|
|
if (entries != cachep->num - slabp->inuse) {
|
|
|
|
bad:
|
|
|
|
printk(KERN_ERR "slab: Internal list corruption detected in "
|
|
|
|
- "cache '%s'(%d), slabp %p(%d). Hexdump:\n",
|
|
|
|
- cachep->name, cachep->num, slabp, slabp->inuse);
|
2011-10-26 22:23:52 +00:00
|
|
|
+ "cache '%s'(%d), slabp %p(%d). Tainted(%s) Hexdump:\n",
|
2010-07-29 23:46:31 +00:00
|
|
|
+ cachep->name, cachep->num, slabp, slabp->inuse, print_tainted());
|
2011-10-26 22:23:52 +00:00
|
|
|
print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 16, 1, slabp,
|
|
|
|
sizeof(*slabp) + cachep->num * sizeof(kmem_bufctl_t),
|
|
|
|
1);
|
2010-07-29 23:46:31 +00:00
|
|
|
diff --git a/mm/slub.c b/mm/slub.c
|
2011-10-26 22:23:52 +00:00
|
|
|
index 95215aa..bbec29e 100644
|
2010-07-29 23:46:31 +00:00
|
|
|
--- a/mm/slub.c
|
|
|
|
+++ b/mm/slub.c
|
2011-10-26 22:23:52 +00:00
|
|
|
@@ -570,7 +570,7 @@ static void slab_bug(struct kmem_cache *s, char *fmt, ...)
|
2010-07-29 23:46:31 +00:00
|
|
|
va_end(args);
|
|
|
|
printk(KERN_ERR "========================================"
|
|
|
|
"=====================================\n");
|
|
|
|
- printk(KERN_ERR "BUG %s: %s\n", s->name, buf);
|
|
|
|
+ printk(KERN_ERR "BUG %s (%s): %s\n", s->name, print_tainted(), buf);
|
|
|
|
printk(KERN_ERR "----------------------------------------"
|
|
|
|
"-------------------------------------\n\n");
|
|
|
|
}
|
2011-10-26 22:23:52 +00:00
|
|
|
--
|
|
|
|
1.7.6.4
|
|
|
|
|