[PATCH] mm: more CONFIG_DEBUG_VM
Put a few more checks under CONFIG_DEBUG_VM Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
6626c5d53b
commit
b7ab795b7b
12
mm/memory.c
12
mm/memory.c
|
@ -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_
|
||||||
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 @@
|
||||||
|
|
||||||
#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)
|
||||||
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,
|
||||||
|
|
Loading…
Reference in a new issue