提交 b7ab795b 编写于 作者: N Nick Piggin 提交者: Linus Torvalds

[PATCH] mm: more CONFIG_DEBUG_VM

Put a few more checks under CONFIG_DEBUG_VM
Signed-off-by: NNick Piggin <npiggin@suse.de>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 6626c5d5
...@@ -388,7 +388,7 @@ struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_ ...@@ -388,7 +388,7 @@ struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_
{ {
unsigned long pfn = pte_pfn(pte); unsigned long pfn = pte_pfn(pte);
if (vma->vm_flags & VM_PFNMAP) { if (unlikely(vma->vm_flags & VM_PFNMAP)) {
unsigned long off = (addr - vma->vm_start) >> PAGE_SHIFT; unsigned long off = (addr - vma->vm_start) >> PAGE_SHIFT;
if (pfn == vma->vm_pgoff + off) if (pfn == vma->vm_pgoff + off)
return NULL; return NULL;
...@@ -396,18 +396,12 @@ struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_ ...@@ -396,18 +396,12 @@ struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_
return NULL; return NULL;
} }
/* #ifdef CONFIG_DEBUG_VM
* Add some anal sanity checks for now. Eventually,
* we should just do "return pfn_to_page(pfn)", but
* in the meantime we check that we get a valid pfn,
* and that the resulting page looks ok.
*
* Remove this test eventually!
*/
if (unlikely(!pfn_valid(pfn))) { if (unlikely(!pfn_valid(pfn))) {
print_bad_pte(vma, pte, addr); print_bad_pte(vma, pte, addr);
return NULL; return NULL;
} }
#endif
/* /*
* NOTE! We still have PageReserved() pages in the page * NOTE! We still have PageReserved() pages in the page
......
...@@ -56,13 +56,11 @@ ...@@ -56,13 +56,11 @@
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
//#define RMAP_DEBUG /* can be enabled only for debugging */
struct kmem_cache *anon_vma_cachep; struct kmem_cache *anon_vma_cachep;
static inline void validate_anon_vma(struct vm_area_struct *find_vma) static inline void validate_anon_vma(struct vm_area_struct *find_vma)
{ {
#ifdef RMAP_DEBUG #ifdef CONFIG_DEBUG_VM
struct anon_vma *anon_vma = find_vma->anon_vma; struct anon_vma *anon_vma = find_vma->anon_vma;
struct vm_area_struct *vma; struct vm_area_struct *vma;
unsigned int mapcount = 0; unsigned int mapcount = 0;
...@@ -551,13 +549,14 @@ void page_add_file_rmap(struct page *page) ...@@ -551,13 +549,14 @@ void page_add_file_rmap(struct page *page)
void page_remove_rmap(struct page *page) void page_remove_rmap(struct page *page)
{ {
if (atomic_add_negative(-1, &page->_mapcount)) { if (atomic_add_negative(-1, &page->_mapcount)) {
if (page_mapcount(page) < 0) { #ifdef CONFIG_DEBUG_VM
if (unlikely(page_mapcount(page) < 0)) {
printk (KERN_EMERG "Eeek! page_mapcount(page) went negative! (%d)\n", page_mapcount(page)); printk (KERN_EMERG "Eeek! page_mapcount(page) went negative! (%d)\n", page_mapcount(page));
printk (KERN_EMERG " page->flags = %lx\n", page->flags); printk (KERN_EMERG " page->flags = %lx\n", page->flags);
printk (KERN_EMERG " page->count = %x\n", page_count(page)); printk (KERN_EMERG " page->count = %x\n", page_count(page));
printk (KERN_EMERG " page->mapping = %p\n", page->mapping); printk (KERN_EMERG " page->mapping = %p\n", page->mapping);
} }
#endif
BUG_ON(page_mapcount(page) < 0); BUG_ON(page_mapcount(page) < 0);
/* /*
* It would be tidy to reset the PageAnon mapping here, * It would be tidy to reset the PageAnon mapping here,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册