lkml.org 
[lkml]   [2004]   [Sep]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subjectpage fault scalability patch V9: [1/7] make mm->rss atomic
    Changelog
    * Make mm->rss atomic, so that rss may be incremented or decremented
    without holding the page table lock.
    * Prerequisite for page table scalability patch

    Signed-off-by: Christoph Lameter <clameter@sgi.com>

    Index: linux-2.6.9-rc2/kernel/fork.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/kernel/fork.c 2004-09-21 13:12:26.000000000 -0700
    +++ linux-2.6.9-rc2/kernel/fork.c 2004-09-21 13:12:29.000000000 -0700
    @@ -296,7 +296,7 @@
    mm->mmap_cache = NULL;
    mm->free_area_cache = oldmm->mmap_base;
    mm->map_count = 0;
    - mm->rss = 0;
    + atomic_set(&mm->mm_rss, 0);
    cpus_clear(mm->cpu_vm_mask);
    mm->mm_rb = RB_ROOT;
    rb_link = &mm->mm_rb.rb_node;
    Index: linux-2.6.9-rc2/include/linux/sched.h
    ===================================================================
    --- linux-2.6.9-rc2.orig/include/linux/sched.h 2004-09-21 13:12:26.000000000 -0700
    +++ linux-2.6.9-rc2/include/linux/sched.h 2004-09-21 13:12:29.000000000 -0700
    @@ -213,9 +213,10 @@
    pgd_t * pgd;
    atomic_t mm_users; /* How many users with user space? */
    atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */
    + atomic_t mm_rss; /* Number of pages used by this mm struct */
    int map_count; /* number of VMAs */
    struct rw_semaphore mmap_sem;
    - spinlock_t page_table_lock; /* Protects task page tables and mm->rss */
    + spinlock_t page_table_lock; /* Protects task page tables */

    struct list_head mmlist; /* List of all active mm's. These are globally strung
    * together off init_mm.mmlist, and are protected
    @@ -225,7 +226,7 @@
    unsigned long start_code, end_code, start_data, end_data;
    unsigned long start_brk, brk, start_stack;
    unsigned long arg_start, arg_end, env_start, env_end;
    - unsigned long rss, total_vm, locked_vm, shared_vm;
    + unsigned long total_vm, locked_vm, shared_vm;
    unsigned long exec_vm, stack_vm, reserved_vm, def_flags;

    unsigned long saved_auxv[42]; /* for /proc/PID/auxv */
    Index: linux-2.6.9-rc2/fs/proc/task_mmu.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/fs/proc/task_mmu.c 2004-09-12 22:31:44.000000000 -0700
    +++ linux-2.6.9-rc2/fs/proc/task_mmu.c 2004-09-21 13:12:29.000000000 -0700
    @@ -21,7 +21,7 @@
    "VmLib:\t%8lu kB\n",
    (mm->total_vm - mm->reserved_vm) << (PAGE_SHIFT-10),
    mm->locked_vm << (PAGE_SHIFT-10),
    - mm->rss << (PAGE_SHIFT-10),
    + (unsigned long)atomic_read(&mm->mm_rss) << (PAGE_SHIFT-10),
    data << (PAGE_SHIFT-10),
    mm->stack_vm << (PAGE_SHIFT-10), text, lib);
    return buffer;
    @@ -38,7 +38,7 @@
    *shared = mm->shared_vm;
    *text = (mm->end_code - mm->start_code) >> PAGE_SHIFT;
    *data = mm->total_vm - mm->shared_vm - *text;
    - *resident = mm->rss;
    + *resident = atomic_read(&mm->mm_rss);
    return mm->total_vm;
    }

    Index: linux-2.6.9-rc2/mm/mmap.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/mm/mmap.c 2004-09-12 22:32:54.000000000 -0700
    +++ linux-2.6.9-rc2/mm/mmap.c 2004-09-21 13:12:29.000000000 -0700
    @@ -1845,7 +1845,7 @@
    vma = mm->mmap;
    mm->mmap = mm->mmap_cache = NULL;
    mm->mm_rb = RB_ROOT;
    - mm->rss = 0;
    + atomic_set(&mm->mm_rss, 0);
    mm->total_vm = 0;
    mm->locked_vm = 0;

    Index: linux-2.6.9-rc2/include/asm-generic/tlb.h
    ===================================================================
    --- linux-2.6.9-rc2.orig/include/asm-generic/tlb.h 2004-09-12 22:31:26.000000000 -0700
    +++ linux-2.6.9-rc2/include/asm-generic/tlb.h 2004-09-21 13:12:29.000000000 -0700
    @@ -88,11 +88,11 @@
    {
    int freed = tlb->freed;
    struct mm_struct *mm = tlb->mm;
    - int rss = mm->rss;
    + int rss = atomic_read(&mm->mm_rss);

    if (rss < freed)
    freed = rss;
    - mm->rss = rss - freed;
    + atomic_set(&mm->mm_rss, rss - freed);
    tlb_flush_mmu(tlb, start, end);

    /* keep the page table cache within bounds */
    Index: linux-2.6.9-rc2/fs/binfmt_flat.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/fs/binfmt_flat.c 2004-09-12 22:31:26.000000000 -0700
    +++ linux-2.6.9-rc2/fs/binfmt_flat.c 2004-09-21 13:12:29.000000000 -0700
    @@ -650,7 +650,7 @@
    current->mm->start_brk = datapos + data_len + bss_len;
    current->mm->brk = (current->mm->start_brk + 3) & ~3;
    current->mm->context.end_brk = memp + ksize((void *) memp) - stack_len;
    - current->mm->rss = 0;
    + atomic_set(current->mm->mm_rss, 0);
    }

    if (flags & FLAT_FLAG_KTRACE)
    Index: linux-2.6.9-rc2/fs/exec.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/fs/exec.c 2004-09-21 13:12:26.000000000 -0700
    +++ linux-2.6.9-rc2/fs/exec.c 2004-09-21 13:12:29.000000000 -0700
    @@ -319,7 +319,7 @@
    pte_unmap(pte);
    goto out;
    }
    - mm->rss++;
    + atomic_inc(&mm->mm_rss);
    lru_cache_add_active(page);
    set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(
    page, vma->vm_page_prot))));
    Index: linux-2.6.9-rc2/mm/memory.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/mm/memory.c 2004-09-12 22:32:26.000000000 -0700
    +++ linux-2.6.9-rc2/mm/memory.c 2004-09-21 13:12:29.000000000 -0700
    @@ -325,7 +325,7 @@
    pte = pte_mkclean(pte);
    pte = pte_mkold(pte);
    get_page(page);
    - dst->rss++;
    + atomic_inc(&dst->mm_rss);
    set_pte(dst_pte, pte);
    page_dup_rmap(page);
    cont_copy_pte_range_noset:
    @@ -1096,7 +1096,7 @@
    page_table = pte_offset_map(pmd, address);
    if (likely(pte_same(*page_table, pte))) {
    if (PageReserved(old_page))
    - ++mm->rss;
    + atomic_inc(&mm->mm_rss);
    else
    page_remove_rmap(old_page);
    break_cow(vma, new_page, address, page_table);
    @@ -1378,7 +1378,7 @@
    if (vm_swap_full())
    remove_exclusive_swap_page(page);

    - mm->rss++;
    + atomic_inc(&mm->mm_rss);
    pte = mk_pte(page, vma->vm_page_prot);
    if (write_access && can_share_swap_page(page)) {
    pte = maybe_mkwrite(pte_mkdirty(pte), vma);
    @@ -1443,7 +1443,7 @@
    spin_unlock(&mm->page_table_lock);
    goto out;
    }
    - mm->rss++;
    + atomic_inc(&mm->mm_rss);
    entry = maybe_mkwrite(pte_mkdirty(mk_pte(page,
    vma->vm_page_prot)),
    vma);
    @@ -1552,7 +1552,7 @@
    /* Only go through if we didn't race with anybody else... */
    if (pte_none(*page_table)) {
    if (!PageReserved(new_page))
    - ++mm->rss;
    + atomic_inc(&mm->mm_rss);
    flush_icache_page(vma, new_page);
    entry = mk_pte(new_page, vma->vm_page_prot);
    if (write_access)
    Index: linux-2.6.9-rc2/fs/binfmt_som.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/fs/binfmt_som.c 2004-09-12 22:32:17.000000000 -0700
    +++ linux-2.6.9-rc2/fs/binfmt_som.c 2004-09-21 13:12:29.000000000 -0700
    @@ -259,7 +259,7 @@
    create_som_tables(bprm);

    current->mm->start_stack = bprm->p;
    - current->mm->rss = 0;
    + atomic_set(current->mm->mm_rss, 0);

    #if 0
    printk("(start_brk) %08lx\n" , (unsigned long) current->mm->start_brk);
    Index: linux-2.6.9-rc2/mm/fremap.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/mm/fremap.c 2004-09-12 22:31:27.000000000 -0700
    +++ linux-2.6.9-rc2/mm/fremap.c 2004-09-21 13:12:29.000000000 -0700
    @@ -38,7 +38,7 @@
    set_page_dirty(page);
    page_remove_rmap(page);
    page_cache_release(page);
    - mm->rss--;
    + atomic_dec(&mm->mm_rss);
    }
    }
    } else {
    @@ -86,7 +86,7 @@

    zap_pte(mm, vma, addr, pte);

    - mm->rss++;
    + atomic_inc(&mm->mm_rss);
    flush_icache_page(vma, page);
    set_pte(pte, mk_pte(page, prot));
    page_add_file_rmap(page);
    Index: linux-2.6.9-rc2/mm/swapfile.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/mm/swapfile.c 2004-09-12 22:31:57.000000000 -0700
    +++ linux-2.6.9-rc2/mm/swapfile.c 2004-09-21 13:12:29.000000000 -0700
    @@ -430,7 +430,7 @@
    unuse_pte(struct vm_area_struct *vma, unsigned long address, pte_t *dir,
    swp_entry_t entry, struct page *page)
    {
    - vma->vm_mm->rss++;
    + atomic_inc(&vma->vm_mm->mm_rss);
    get_page(page);
    set_pte(dir, pte_mkold(mk_pte(page, vma->vm_page_prot)));
    page_add_anon_rmap(page, vma, address);
    Index: linux-2.6.9-rc2/fs/binfmt_aout.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/fs/binfmt_aout.c 2004-09-12 22:31:57.000000000 -0700
    +++ linux-2.6.9-rc2/fs/binfmt_aout.c 2004-09-21 13:12:29.000000000 -0700
    @@ -309,7 +309,7 @@
    (current->mm->start_brk = N_BSSADDR(ex));
    current->mm->free_area_cache = current->mm->mmap_base;

    - current->mm->rss = 0;
    + atomic_set(&current->mm->mm_rss, 0);
    current->mm->mmap = NULL;
    compute_creds(bprm);
    current->flags &= ~PF_FORKNOEXEC;
    Index: linux-2.6.9-rc2/arch/ia64/mm/hugetlbpage.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/ia64/mm/hugetlbpage.c 2004-09-12 22:32:48.000000000 -0700
    +++ linux-2.6.9-rc2/arch/ia64/mm/hugetlbpage.c 2004-09-21 13:12:29.000000000 -0700
    @@ -65,7 +65,7 @@
    {
    pte_t entry;

    - mm->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &mm->mm_rss);
    if (write_access) {
    entry =
    pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
    @@ -108,7 +108,7 @@
    ptepage = pte_page(entry);
    get_page(ptepage);
    set_pte(dst_pte, entry);
    - dst->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &dst->mm_rss);
    addr += HPAGE_SIZE;
    }
    return 0;
    @@ -249,7 +249,7 @@
    put_page(page);
    pte_clear(pte);
    }
    - mm->rss -= (end - start) >> PAGE_SHIFT;
    + atomic_sub((end - start) >> PAGE_SHIFT, &mm->mm_rss);
    flush_tlb_range(vma, start, end);
    }

    Index: linux-2.6.9-rc2/fs/proc/array.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/fs/proc/array.c 2004-09-12 22:32:54.000000000 -0700
    +++ linux-2.6.9-rc2/fs/proc/array.c 2004-09-21 13:12:29.000000000 -0700
    @@ -388,7 +388,7 @@
    jiffies_to_clock_t(task->it_real_value),
    start_time,
    vsize,
    - mm ? mm->rss : 0, /* you might want to shift this left 3 */
    + mm ? (unsigned long)atomic_read(&mm->mm_rss) : 0, /* you might want to shift this left 3 */
    task->rlim[RLIMIT_RSS].rlim_cur,
    mm ? mm->start_code : 0,
    mm ? mm->end_code : 0,
    Index: linux-2.6.9-rc2/fs/binfmt_elf.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/fs/binfmt_elf.c 2004-09-12 22:32:26.000000000 -0700
    +++ linux-2.6.9-rc2/fs/binfmt_elf.c 2004-09-21 13:12:29.000000000 -0700
    @@ -708,7 +708,7 @@

    /* Do this so that we can load the interpreter, if need be. We will
    change some of these later */
    - current->mm->rss = 0;
    + atomic_set(&current->mm->mm_rss, 0);
    current->mm->free_area_cache = current->mm->mmap_base;
    retval = setup_arg_pages(bprm, executable_stack);
    if (retval < 0) {
    Index: linux-2.6.9-rc2/mm/rmap.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/mm/rmap.c 2004-09-21 13:12:26.000000000 -0700
    +++ linux-2.6.9-rc2/mm/rmap.c 2004-09-21 13:12:29.000000000 -0700
    @@ -262,7 +262,7 @@
    pte_t *pte;
    int referenced = 0;

    - if (!mm->rss)
    + if (!atomic_read(&mm->mm_rss))
    goto out;
    address = vma_address(page, vma);
    if (address == -EFAULT)
    @@ -501,7 +501,7 @@
    pte_t pteval;
    int ret = SWAP_AGAIN;

    - if (!mm->rss)
    + if (!atomic_read(&mm->mm_rss))
    goto out;
    address = vma_address(page, vma);
    if (address == -EFAULT)
    @@ -580,7 +580,7 @@
    BUG_ON(pte_file(*pte));
    }

    - mm->rss--;
    + atomic_dec(&mm->mm_rss);
    page_remove_rmap(page);
    page_cache_release(page);

    @@ -680,7 +680,7 @@

    page_remove_rmap(page);
    page_cache_release(page);
    - mm->rss--;
    + atomic_dec(&mm->mm_rss);
    (*mapcount)--;
    }

    @@ -779,7 +779,7 @@
    if (vma->vm_flags & (VM_LOCKED|VM_RESERVED))
    continue;
    cursor = (unsigned long) vma->vm_private_data;
    - while (vma->vm_mm->rss &&
    + while (atomic_read(&vma->vm_mm->mm_rss) &&
    cursor < max_nl_cursor &&
    cursor < vma->vm_end - vma->vm_start) {
    try_to_unmap_cluster(cursor, &mapcount, vma);
    Index: linux-2.6.9-rc2/include/asm-ia64/tlb.h
    ===================================================================
    --- linux-2.6.9-rc2.orig/include/asm-ia64/tlb.h 2004-09-12 22:32:26.000000000 -0700
    +++ linux-2.6.9-rc2/include/asm-ia64/tlb.h 2004-09-21 13:12:29.000000000 -0700
    @@ -161,11 +161,11 @@
    {
    unsigned long freed = tlb->freed;
    struct mm_struct *mm = tlb->mm;
    - unsigned long rss = mm->rss;
    + unsigned long rss = atomic_read(&mm->mm_rss);

    if (rss < freed)
    freed = rss;
    - mm->rss = rss - freed;
    + atomic_sub(freed, &mm->mm_rss);
    /*
    * Note: tlb->nr may be 0 at this point, so we can't rely on tlb->start_addr and
    * tlb->end_addr.
    Index: linux-2.6.9-rc2/include/asm-arm/tlb.h
    ===================================================================
    --- linux-2.6.9-rc2.orig/include/asm-arm/tlb.h 2004-09-12 22:31:27.000000000 -0700
    +++ linux-2.6.9-rc2/include/asm-arm/tlb.h 2004-09-21 13:12:29.000000000 -0700
    @@ -54,11 +54,11 @@
    {
    struct mm_struct *mm = tlb->mm;
    unsigned long freed = tlb->freed;
    - int rss = mm->rss;
    + int rss = atomic_read(&mm->mm_rss);

    if (rss < freed)
    freed = rss;
    - mm->rss = rss - freed;
    + atomic_sub(freed, &mm->mm_rss);

    if (freed) {
    flush_tlb_mm(mm);
    Index: linux-2.6.9-rc2/include/asm-arm26/tlb.h
    ===================================================================
    --- linux-2.6.9-rc2.orig/include/asm-arm26/tlb.h 2004-09-12 22:33:38.000000000 -0700
    +++ linux-2.6.9-rc2/include/asm-arm26/tlb.h 2004-09-21 13:12:29.000000000 -0700
    @@ -35,11 +35,11 @@
    {
    struct mm_struct *mm = tlb->mm;
    unsigned long freed = tlb->freed;
    - int rss = mm->rss;
    + int rss = atomic_read(&mm->mm_rss);

    if (rss < freed)
    freed = rss;
    - mm->rss = rss - freed;
    + atomic_sub(freed, &mm->mm_rss);

    if (freed) {
    flush_tlb_mm(mm);
    Index: linux-2.6.9-rc2/include/asm-sparc64/tlb.h
    ===================================================================
    --- linux-2.6.9-rc2.orig/include/asm-sparc64/tlb.h 2004-09-12 22:33:11.000000000 -0700
    +++ linux-2.6.9-rc2/include/asm-sparc64/tlb.h 2004-09-21 13:12:29.000000000 -0700
    @@ -80,11 +80,11 @@
    {
    unsigned long freed = mp->freed;
    struct mm_struct *mm = mp->mm;
    - unsigned long rss = mm->rss;
    + unsigned long rss = atomic_read(&mm->mm_rss);

    if (rss < freed)
    freed = rss;
    - mm->rss = rss - freed;
    + atomic_sub(freed, &mm->mm_rss);

    tlb_flush_mmu(mp);

    Index: linux-2.6.9-rc2/arch/sh/mm/hugetlbpage.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/sh/mm/hugetlbpage.c 2004-09-12 22:32:54.000000000 -0700
    +++ linux-2.6.9-rc2/arch/sh/mm/hugetlbpage.c 2004-09-21 13:19:27.000000000 -0700
    @@ -62,7 +62,7 @@
    unsigned long i;
    pte_t entry;

    - mm->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &mm->mm_rss);

    if (write_access)
    entry = pte_mkwrite(pte_mkdirty(mk_pte(page,
    @@ -115,7 +115,7 @@
    pte_val(entry) += PAGE_SIZE;
    dst_pte++;
    }
    - dst->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &dst->mm_rss);
    addr += HPAGE_SIZE;
    }
    return 0;
    @@ -206,7 +206,7 @@
    pte++;
    }
    }
    - mm->rss -= (end - start) >> PAGE_SHIFT;
    + atomic_sub((end - start) >> PAGE_SHIFT, &mm->mm_rss);
    flush_tlb_range(vma, start, end);
    }

    Index: linux-2.6.9-rc2/arch/x86_64/ia32/ia32_aout.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/x86_64/ia32/ia32_aout.c 2004-09-12 22:33:38.000000000 -0700
    +++ linux-2.6.9-rc2/arch/x86_64/ia32/ia32_aout.c 2004-09-21 13:15:41.000000000 -0700
    @@ -309,7 +309,7 @@
    (current->mm->start_brk = N_BSSADDR(ex));
    current->mm->free_area_cache = TASK_UNMAPPED_BASE;

    - current->mm->rss = 0;
    + atomic_set(&current->mm->mm_rss. 0);
    current->mm->mmap = NULL;
    compute_creds(bprm);
    current->flags &= ~PF_FORKNOEXEC;
    Index: linux-2.6.9-rc2/arch/ppc64/mm/hugetlbpage.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/ppc64/mm/hugetlbpage.c 2004-09-21 13:12:26.000000000 -0700
    +++ linux-2.6.9-rc2/arch/ppc64/mm/hugetlbpage.c 2004-09-21 13:22:41.000000000 -0700
    @@ -125,7 +125,7 @@
    hugepte_t entry;
    int i;

    - mm->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &mm->mm_rss);
    entry = mk_hugepte(page, write_access);
    for (i = 0; i < HUGEPTE_BATCH_SIZE; i++)
    set_hugepte(ptep+i, entry);
    @@ -287,7 +287,7 @@
    /* This is the first hugepte in a batch */
    ptepage = hugepte_page(entry);
    get_page(ptepage);
    - dst->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &dst->mm_rss);
    }
    set_hugepte(dst_pte, entry);

    @@ -410,7 +410,7 @@
    }
    put_cpu();

    - mm->rss -= (end - start) >> PAGE_SHIFT;
    + atomic_sub((end - start) >> PAGE_SHIFT, &mm->mm_rss);
    }

    int hugetlb_prefault(struct address_space *mapping, struct vm_area_struct *vma)
    Index: linux-2.6.9-rc2/arch/sh64/mm/hugetlbpage.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/sh64/mm/hugetlbpage.c 2004-09-12 22:32:00.000000000 -0700
    +++ linux-2.6.9-rc2/arch/sh64/mm/hugetlbpage.c 2004-09-21 13:20:44.000000000 -0700
    @@ -62,7 +62,7 @@
    unsigned long i;
    pte_t entry;

    - mm->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &mm->mm_rss);

    if (write_access)
    entry = pte_mkwrite(pte_mkdirty(mk_pte(page,
    @@ -115,7 +115,7 @@
    pte_val(entry) += PAGE_SIZE;
    dst_pte++;
    }
    - dst->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &dst->mm_rss);
    addr += HPAGE_SIZE;
    }
    return 0;
    @@ -206,7 +206,7 @@
    pte++;
    }
    }
    - mm->rss -= (end - start) >> PAGE_SHIFT;
    + atomic_sub((end - start) >> PAGE_SHIFT, &mm->mm_rss);
    flush_tlb_range(vma, start, end);
    }

    Index: linux-2.6.9-rc2/arch/sparc64/mm/hugetlbpage.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/sparc64/mm/hugetlbpage.c 2004-09-12 22:32:55.000000000 -0700
    +++ linux-2.6.9-rc2/arch/sparc64/mm/hugetlbpage.c 2004-09-21 13:17:58.000000000 -0700
    @@ -59,7 +59,7 @@
    unsigned long i;
    pte_t entry;

    - mm->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &mm->mm_rss);

    if (write_access)
    entry = pte_mkwrite(pte_mkdirty(mk_pte(page,
    @@ -112,7 +112,7 @@
    pte_val(entry) += PAGE_SIZE;
    dst_pte++;
    }
    - dst->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &dst->mm_rss);
    addr += HPAGE_SIZE;
    }
    return 0;
    @@ -203,7 +203,7 @@
    pte++;
    }
    }
    - mm->rss -= (end - start) >> PAGE_SHIFT;
    + atomic_sub((end - start) >> PAGE_SHIFT, &mm->mm_rss);
    flush_tlb_range(vma, start, end);
    }

    Index: linux-2.6.9-rc2/arch/mips/kernel/irixelf.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/mips/kernel/irixelf.c 2004-09-12 22:33:39.000000000 -0700
    +++ linux-2.6.9-rc2/arch/mips/kernel/irixelf.c 2004-09-21 13:25:46.000000000 -0700
    @@ -686,7 +686,7 @@
    /* Do this so that we can load the interpreter, if need be. We will
    * change some of these later.
    */
    - current->mm->rss = 0;
    + atomic_set(&current->mm->mm_rss, 0);
    setup_arg_pages(bprm, EXSTACK_DEFAULT);
    current->mm->start_stack = bprm->p;

    Index: linux-2.6.9-rc2/arch/m68k/atari/stram.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/m68k/atari/stram.c 2004-09-12 22:33:11.000000000 -0700
    +++ linux-2.6.9-rc2/arch/m68k/atari/stram.c 2004-09-21 13:23:38.000000000 -0700
    @@ -635,7 +635,7 @@
    set_pte(dir, pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
    swap_free(entry);
    get_page(page);
    - ++vma->vm_mm->rss;
    + atomic_inc(&vma->vm_mm->mm_rss);
    }

    static inline void unswap_pmd(struct vm_area_struct * vma, pmd_t *dir,
    Index: linux-2.6.9-rc2/arch/i386/mm/hugetlbpage.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/i386/mm/hugetlbpage.c 2004-09-12 22:33:36.000000000 -0700
    +++ linux-2.6.9-rc2/arch/i386/mm/hugetlbpage.c 2004-09-21 13:24:57.000000000 -0700
    @@ -42,7 +42,7 @@
    {
    pte_t entry;

    - mm->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &mm->mm_rss);
    if (write_access) {
    entry =
    pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
    @@ -82,7 +82,7 @@
    ptepage = pte_page(entry);
    get_page(ptepage);
    set_pte(dst_pte, entry);
    - dst->rss += (HPAGE_SIZE / PAGE_SIZE);
    + atomic_add(HPAGE_SIZE / PAGE_SIZE, &dst->mm_rss);
    addr += HPAGE_SIZE;
    }
    return 0;
    @@ -218,7 +218,7 @@
    page = pte_page(pte);
    put_page(page);
    }
    - mm->rss -= (end - start) >> PAGE_SHIFT;
    + atomic_sub((end - start) >> PAGE_SHIFT, &mm->mm_rss);
    flush_tlb_range(vma, start, end);
    }

    Index: linux-2.6.9-rc2/arch/sparc64/kernel/binfmt_aout32.c
    ===================================================================
    --- linux-2.6.9-rc2.orig/arch/sparc64/kernel/binfmt_aout32.c 2004-09-12 22:32:44.000000000 -0700
    +++ linux-2.6.9-rc2/arch/sparc64/kernel/binfmt_aout32.c 2004-09-21 13:21:23.000000000 -0700
    @@ -239,7 +239,7 @@
    current->mm->brk = ex.a_bss +
    (current->mm->start_brk = N_BSSADDR(ex));

    - current->mm->rss = 0;
    + atomic_set(&current->mm->mm_rss, 0);
    current->mm->mmap = NULL;
    compute_creds(bprm);
    current->flags &= ~PF_FORKNOEXEC;
    -
    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: 2005-03-22 14:06    [W:0.053 / U:30.484 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site