[4/11] hugetlb: wrap hugetlb_prefault with prefault_key()

William Lee Irwin III (wli@holomorphy.com)
Tue, 12 Nov 2002 00:28:53 -0800


This wraps hugetlb_prefault() with prefault_key() in order to isolate the
dependency on inodes for prefaulting the hugetlb vma.

hugetlbpage.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)

diff -urpN htlb-2.5.47-3/arch/i386/mm/hugetlbpage.c htlb-2.5.47-4/arch/i386/mm/hugetlbpage.c
--- htlb-2.5.47-3/arch/i386/mm/hugetlbpage.c 2002-11-11 21:23:55.000000000 -0800
+++ htlb-2.5.47-4/arch/i386/mm/hugetlbpage.c 2002-11-11 21:30:36.000000000 -0800
@@ -350,12 +350,18 @@ static int check_size_prot(struct inode
return 0;
}

+static int prefault_key(struct hugetlb_key *key, struct vm_area_struct *vma)
+{
+ struct inode *inode = (struct inode *)key;
+
+ return hugetlb_prefault(inode->i_mapping, vma);
+}
+
static int alloc_shared_hugetlb_pages(int key, unsigned long addr, unsigned long len, int prot, int flag)
{
struct mm_struct *mm = current->mm;
struct vm_area_struct *vma;
struct inode *inode;
- struct address_space *mapping;
int retval = -ENOMEM;
int newalloc = 0;

@@ -367,8 +373,6 @@ static int alloc_shared_hugetlb_pages(in
} else
spin_unlock(&htlbpage_lock);

- mapping = inode->i_mapping;
-
addr = do_mmap_pgoff(NULL, addr, len, (unsigned long) prot,
MAP_NORESERVE|MAP_FIXED|MAP_PRIVATE|MAP_ANONYMOUS, 0);
if (IS_ERR((void *) addr))
@@ -380,7 +384,7 @@ static int alloc_shared_hugetlb_pages(in
goto freeinode;
}

- retval = hugetlb_prefault(mapping, vma);
+ retval = prefault_key((struct hugetlb_key *)inode, vma);
if (retval)
goto out;

-
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/