lkml.org 
[lkml]   [2007]   [Apr]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/13] maps#2: Remove vma from args in the page walker
    Date
    Remove vma from args in the page walker

    This makes the walker more generic.

    Signed-off-by: Matt Mackall <mpm@selenic.com>

    Index: mm/fs/proc/task_mmu.c
    ===================================================================
    --- mm.orig/fs/proc/task_mmu.c 2007-03-24 21:33:50.000000000 -0500
    +++ mm/fs/proc/task_mmu.c 2007-03-24 21:33:52.000000000 -0500
    @@ -313,25 +313,26 @@ static void walk_pud_range(pgd_t *pgd, u
    }

    /*
    - * walk_page_range - walk the page tables of a VMA with a callback
    - * @vma - VMA to walk
    + * walk_page_range - walk a memory map's page tables with a callback
    + * @mm - memory map to walk
    + * @addr - starting address
    + * @end - ending address
    * @action - callback invoked for every bottom-level (PTE) page table
    * @private - private data passed to the callback function
    *
    * Recursively walk the page table for the memory area in a VMA, calling
    * a callback for every bottom-level (PTE) page table.
    */
    -static void walk_page_range(struct vm_area_struct *vma,
    +static void walk_page_range(struct mm_struct *mm,
    + unsigned long addr, unsigned long end,
    void (*action)(pmd_t *, unsigned long,
    unsigned long, void *),
    void *private)
    {
    - unsigned long addr = vma->vm_start;
    - unsigned long end = vma->vm_end;
    pgd_t *pgd;
    unsigned long next;

    - for (pgd = pgd_offset(vma->vm_mm, addr); addr != end;
    + for (pgd = pgd_offset(mm, addr); addr != end;
    pgd++, addr = next) {
    next = pgd_addr_end(addr, end);
    if (pgd_none_or_clear_bad(pgd))
    @@ -348,7 +349,8 @@ static int show_smap(struct seq_file *m,
    memset(&mss, 0, sizeof mss);
    mss.vma = vma;
    if (vma->vm_mm && !is_vm_hugetlb_page(vma))
    - walk_page_range(vma, smaps_pte_range, &mss);
    + walk_page_range(vma->vm_mm, vma->vm_start, vma->vm_end,
    + smaps_pte_range, &mss);
    return show_map_internal(m, v, &mss);
    }

    @@ -359,7 +361,8 @@ void clear_refs_smap(struct mm_struct *m
    down_read(&mm->mmap_sem);
    for (vma = mm->mmap; vma; vma = vma->vm_next)
    if (vma->vm_mm && !is_vm_hugetlb_page(vma))
    - walk_page_range(vma, clear_refs_pte_range, vma);
    + walk_page_range(vma->vm_mm, vma->vm_start, vma->vm_end,
    + clear_refs_pte_range, vma);
    flush_tlb_mm(mm);
    up_read(&mm->mmap_sem);
    }
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-04-07 00:09    [W:0.020 / U:59.920 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site