diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-10-01 05:45:41 +0200 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-10-01 05:45:41 +0200 |
commit | 1c7da74c4aab595a994beb5fe728ebf0d0b41f59 (patch) | |
tree | 64128abdf9550ebb51d8f3ee6732d7350b9c62f2 /mm/slab.c | |
parent | Merge branch 'master' into upstream (diff) | |
parent | [PATCH] SCSI: fix request flag-related build breakage (diff) | |
download | linux-1c7da74c4aab595a994beb5fe728ebf0d0b41f59.tar.xz linux-1c7da74c4aab595a994beb5fe728ebf0d0b41f59.zip |
Merge branch 'master' into upstream
Diffstat (limited to 'mm/slab.c')
-rw-r--r-- | mm/slab.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/mm/slab.c b/mm/slab.c index 792bfe320a8b..3dbd6f4e7477 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1683,10 +1683,32 @@ static void poison_obj(struct kmem_cache *cachep, void *addr, unsigned char val) static void dump_line(char *data, int offset, int limit) { int i; + unsigned char error = 0; + int bad_count = 0; + printk(KERN_ERR "%03x:", offset); - for (i = 0; i < limit; i++) + for (i = 0; i < limit; i++) { + if (data[offset + i] != POISON_FREE) { + error = data[offset + i]; + bad_count++; + } printk(" %02x", (unsigned char)data[offset + i]); + } printk("\n"); + + if (bad_count == 1) { + error ^= POISON_FREE; + if (!(error & (error - 1))) { + printk(KERN_ERR "Single bit error detected. Probably " + "bad RAM.\n"); +#ifdef CONFIG_X86 + printk(KERN_ERR "Run memtest86+ or a similar memory " + "test tool.\n"); +#else + printk(KERN_ERR "Run a memory test tool.\n"); +#endif + } + } } #endif |