Re: Page fault scalability patch V18: Drop first acquisition of ptl

From: Christoph Lameter <clameter_at_sgi.com>
Date: 2005-03-03 17:13:59
On Wed, 2 Mar 2005, Andrew Morton wrote:

> > Any mmap changes requires the mmapsem.
>
> sys_remap_file_pages() will call install_page() under down_read(mmap_sem).
> It relies upon page_table_lock for pte atomicity.

This is not relevant since it only deals with file pages. ptes are only
installed atomically for anonymous memory (if CONFIG_ATOMIC_OPS
is defined).

do_file_page() does call the populate function which does the right thing
in acquiring the page_table_lock before a pte update. My patch does not
touch that.

/*
 * Install a file pte to a given virtual memory address, release any
 * previously existing mapping.
 */
int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma,
                unsigned long addr, unsigned long pgoff, pgprot_t prot)
{
        int err = -ENOMEM;
        pte_t *pte;
        pmd_t *pmd;
        pud_t *pud;
        pgd_t *pgd;
        pte_t pte_val;

        pgd = pgd_offset(mm, addr);
        spin_lock(&mm->page_table_lock);

        pud = pud_alloc(mm, pgd, addr);
        if (!pud)
                goto err_unlock;

        pmd = pmd_alloc(mm, pud, addr);
        if (!pmd)
                goto err_unlock;

        pte = pte_alloc_map(mm, pmd, addr);
        if (!pte)
                goto err_unlock;

        zap_pte(mm, vma, addr, pte);

        set_pte(pte, pgoff_to_pte(pgoff));
        pte_val = *pte;
        pte_unmap(pte);
        update_mmu_cache(vma, addr, pte_val);
        spin_unlock(&mm->page_table_lock);
        return 0;

err_unlock:
        spin_unlock(&mm->page_table_lock);
        return err;
}



-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Thu Mar 3 01:43:19 2005

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:36 EST