summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorAndy Grover <andy.grover@oracle.com>2009-04-13 14:40:05 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-04-13 15:04:32 -0700
commit9de100d001564f58c3fb2ec1bd03e540ac0aa357 (patch)
treeee7d599718821e0d272d3d63325ad940fc982e0e /mm
parentd20d5a7456d57d8affa88f45f27ae96ea49c29e4 (diff)
downloadlwn-9de100d001564f58c3fb2ec1bd03e540ac0aa357.tar.gz
lwn-9de100d001564f58c3fb2ec1bd03e540ac0aa357.zip
mm: document get_user_pages_fast()
While better than get_user_pages(), the usage of gupf(), especially the return values and the fact that it can potentially only partially pin the range, warranted some documentation. Signed-off-by: Andy Grover <andy.grover@oracle.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/util.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/mm/util.c b/mm/util.c
index 2599e83eea17..55bef160b9f1 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -223,6 +223,22 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
}
#endif
+/**
+ * get_user_pages_fast() - pin user pages in memory
+ * @start: starting user address
+ * @nr_pages: number of pages from start to pin
+ * @write: whether pages will be written to
+ * @pages: array that receives pointers to the pages pinned.
+ * Should be at least nr_pages long.
+ *
+ * Attempt to pin user pages in memory without taking mm->mmap_sem.
+ * If not successful, it will fall back to taking the lock and
+ * calling get_user_pages().
+ *
+ * Returns number of pages pinned. This may be fewer than the number
+ * requested. If nr_pages is 0 or negative, returns 0. If no pages
+ * were pinned, returns -errno.
+ */
int __attribute__((weak)) get_user_pages_fast(unsigned long start,
int nr_pages, int write, struct page **pages)
{