lkml.org 
[lkml]   [2007]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 7/7] hugetlbfs fault handler
    Date

    Signed-off-by: Adam Litke <agl@us.ibm.com>
    ---

    fs/hugetlbfs/inode.c | 1 +
    mm/hugetlb.c | 4 +++-
    mm/memory.c | 4 ++--
    3 files changed, 6 insertions(+), 3 deletions(-)

    diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
    index 823a9e3..29e65c2 100644
    --- a/fs/hugetlbfs/inode.c
    +++ b/fs/hugetlbfs/inode.c
    @@ -571,6 +571,7 @@ static const struct pagetable_operations_struct hugetlbfs_pagetable_ops = {
    .unmap_page_range = unmap_hugepage_range,
    .change_protection = hugetlb_change_protection,
    .free_pgtable_range = hugetlb_free_pgd_range,
    + .fault = hugetlb_fault,
    };

    static const struct inode_operations hugetlbfs_dir_inode_operations = {
    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index d902fb9..e0f0607 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -590,6 +590,8 @@ int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
    unsigned long vaddr = *position;
    int remainder = *length;

    + BUG_ON(!has_pt_op(vma, fault));
    +
    spin_lock(&mm->page_table_lock);
    while (vaddr < vma->vm_end && remainder) {
    pte_t *pte;
    @@ -606,7 +608,7 @@ int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
    int ret;

    spin_unlock(&mm->page_table_lock);
    - ret = hugetlb_fault(mm, vma, vaddr, 0);
    + ret = pt_op(vma, fault)(mm, vma, vaddr, 0);
    spin_lock(&mm->page_table_lock);
    if (ret == VM_FAULT_MINOR)
    continue;
    diff --git a/mm/memory.c b/mm/memory.c
    index d2f28e7..bd7c243 100644
    --- a/mm/memory.c
    +++ b/mm/memory.c
    @@ -2499,8 +2499,8 @@ int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,

    count_vm_event(PGFAULT);

    - if (unlikely(is_vm_hugetlb_page(vma)))
    - return hugetlb_fault(mm, vma, address, write_access);
    + if (unlikely(has_pt_op(vma, fault)))
    + return pt_op(vma, fault)(mm, vma, address, write_access);

    pgd = pgd_offset(mm, address);
    pud = pud_alloc(mm, pgd, 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: 2007-03-19 21:11    [W:4.156 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site