2.6.15-rc1-mm2 0x414 Bad page states

From: Hugh Dickins
Date: Fri Nov 18 2005 - 14:16:39 EST


Thanks a lot for your PageReserved "Bad page state" reports.

Sorry for being so slow to respond. I've not worked it out yet.

Would each of you please apply the slightly-more-debug-info patch
below, and mail me the first batch of reports that you get when
you try to reproduce the problem (it does assume only one CPU,
which happens to be the case for each of you).

Thanks,
Hugh

--- 2.6.15-rc1-mm2/mm/memory.c 2005-11-18 15:23:09.000000000 +0000
+++ linux/mm/memory.c 2005-11-18 17:56:23.000000000 +0000
@@ -569,6 +569,7 @@ static unsigned long zap_pte_range(struc
unsigned long addr, unsigned long end,
long *zap_work, struct zap_details *details)
{
+ extern struct vm_area_struct *zap_vma;
struct mm_struct *mm = tlb->mm;
pte_t *pte;
spinlock_t *ptl;
@@ -576,6 +577,7 @@ static unsigned long zap_pte_range(struc
int anon_rss = 0;

pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
+ zap_vma = vma;
do {
pte_t ptent = *pte;
if (pte_none(ptent)) {
@@ -649,6 +651,7 @@ static unsigned long zap_pte_range(struc
pte_clear_full(mm, addr, pte, tlb->fullmm);
} while (pte++, addr += PAGE_SIZE, (addr != end && *zap_work > 0));

+ zap_vma = NULL;
add_mm_rss(mm, file_rss, anon_rss);
pte_unmap_unlock(pte - 1, ptl);

--- 2.6.15-rc1-mm2/mm/page_alloc.c 2005-11-18 15:23:09.000000000 +0000
+++ linux/mm/page_alloc.c 2005-11-18 18:16:28.000000000 +0000
@@ -36,6 +36,7 @@
#include <linux/memory_hotplug.h>
#include <linux/nodemask.h>
#include <linux/vmalloc.h>
+#include <linux/kallsyms.h>

#include <asm/tlbflush.h>
#include "internal.h"
@@ -122,6 +123,7 @@ static int bad_range(struct zone *zone,
return 0;
}

+struct vm_area_struct *zap_vma;
static void bad_page(const char *function, struct page *page)
{
printk(KERN_EMERG "Bad page state at %s (in process '%s', page %p)\n",
@@ -129,6 +131,13 @@ static void bad_page(const char *functio
printk(KERN_EMERG "flags:0x%0*lx mapping:%p mapcount:%d count:%d\n",
(int)(2*sizeof(unsigned long)), (unsigned long)page->flags,
page->mapping, page_mapcount(page), page_count(page));
+ if (zap_vma) {
+ printk(KERN_EMERG "vm_flags:0x%lx", zap_vma->vm_flags);
+ print_symbol(" %s", (unsigned long)
+ (zap_vma->vm_ops? zap_vma->vm_ops->open: NULL));
+ print_symbol(" %s\n", (unsigned long)
+ (zap_vma->vm_ops? zap_vma->vm_ops->nopage: NULL));
+ }
printk(KERN_EMERG "Backtrace:\n");
dump_stack();
{
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/