lkml.org 
[lkml]   [2004]   [Aug]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: page fault fastpath patch v2: fix race conditions, stats for 8,32 and 512 cpu SMP


    On Wed, 18 Aug 2004, William Lee Irwin III wrote:

    > On Wed, 18 Aug 2004, William Lee Irwin III wrote:
    > >> exit_mmap() has removed the vma from ->i_mmap and ->mmap prior to
    > >> unmapping the pages, so this should be safe unless that operation
    > >> can be caught while it's in progress.
    >
    > On Wed, Aug 18, 2004 at 08:07:24PM -0400, Rajesh Venkatasubramanian wrote:
    > > No. Unfortunately exit_mmap() removes vmas from ->i_mmap after removing
    > > page table pages. Maybe we can reverse this, though.
    >
    > Something like this?

    Yeah, something similar... A small nitpick: page_table_lock
    nests within i_mmap_lock and anon_lock.

    do_unmap() also frees page tables first and then removes vmas from
    i_mmap (and/or) anon_vma list. Is there a reason to preserve
    this ordering ?

    Rajesh

    >
    > Index: mm1-2.6.8.1/mm/mmap.c
    > ===================================================================
    > --- mm1-2.6.8.1.orig/mm/mmap.c 2004-08-16 23:47:16.000000000 -0700
    > +++ mm1-2.6.8.1/mm/mmap.c 2004-08-18 17:18:26.513559632 -0700
    > @@ -1810,6 +1810,14 @@
    > mm->map_count -= unmap_vmas(&tlb, mm, mm->mmap, 0,
    > ~0UL, &nr_accounted, NULL);
    > vm_unacct_memory(nr_accounted);
    > + /*
    > + * Walk the list again, actually closing and freeing it.
    > + */
    > + while (vma) {
    > + struct vm_area_struct *next = vma->vm_next;
    > + remove_vm_struct(vma);
    > + vma = next;
    > + }
    > BUG_ON(mm->map_count); /* This is just debugging */
    > clear_page_tables(tlb, FIRST_USER_PGD_NR, USER_PTRS_PER_PGD);
    > tlb_finish_mmu(tlb, 0, MM_VM_SIZE(mm));
    > @@ -1822,16 +1830,6 @@
    > mm->locked_vm = 0;
    >
    > spin_unlock(&mm->page_table_lock);
    > -
    > - /*
    > - * Walk the list again, actually closing and freeing it
    > - * without holding any MM locks.
    > - */
    > - while (vma) {
    > - struct vm_area_struct *next = vma->vm_next;
    > - remove_vm_struct(vma);
    > - vma = next;
    > - }
    > }
    >
    > /* Insert vm structure into process list sorted by address
    >
    -
    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:05    [W:0.024 / U:29.868 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site