Skip to content

Commit

Permalink
[PATCH] mm: more CONFIG_DEBUG_VM
Browse files Browse the repository at this point in the history
Put a few more checks under CONFIG_DEBUG_VM

Signed-off-by: Nick Piggin <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Nick Piggin authored and Linus Torvalds committed Mar 22, 2006
1 parent 6626c5d commit b7ab795
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 14 deletions.
12 changes: 3 additions & 9 deletions mm/memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,26 +388,20 @@ struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, 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;
if (pfn == vma->vm_pgoff + off)
return NULL;
if (!is_cow_mapping(vma->vm_flags))
return NULL;
}

/*
* 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!
*/
#ifdef CONFIG_DEBUG_VM
if (unlikely(!pfn_valid(pfn))) {
print_bad_pte(vma, pte, addr);
return NULL;
}
#endif

/*
* NOTE! We still have PageReserved() pages in the page
Expand Down
9 changes: 4 additions & 5 deletions mm/rmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,11 @@

#include <asm/tlbflush.h>

//#define RMAP_DEBUG /* can be enabled only for debugging */

struct kmem_cache *anon_vma_cachep;

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 vm_area_struct *vma;
unsigned int mapcount = 0;
Expand Down Expand Up @@ -551,13 +549,14 @@ void page_add_file_rmap(struct page *page)
void page_remove_rmap(struct page *page)
{
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 " page->flags = %lx\n", page->flags);
printk (KERN_EMERG " page->count = %x\n", page_count(page));
printk (KERN_EMERG " page->mapping = %p\n", page->mapping);
}

#endif
BUG_ON(page_mapcount(page) < 0);
/*
* It would be tidy to reset the PageAnon mapping here,
Expand Down

0 comments on commit b7ab795

Please sign in to comment.