|
@@ -917,6 +917,9 @@ EXPORT_SYMBOL(get_user_pages_unlocked);
|
|
|
* only intends to ensure the pages are faulted in.
|
|
|
* @vmas: array of pointers to vmas corresponding to each page.
|
|
|
* Or NULL if the caller does not require them.
|
|
|
+ * @locked: pointer to lock flag indicating whether lock is held and
|
|
|
+ * subsequently whether VM_FAULT_RETRY functionality can be
|
|
|
+ * utilised. Lock must initially be held.
|
|
|
*
|
|
|
* 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
|
|
@@ -960,10 +963,10 @@ EXPORT_SYMBOL(get_user_pages_unlocked);
|
|
|
long get_user_pages_remote(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
unsigned long start, unsigned long nr_pages,
|
|
|
unsigned int gup_flags, struct page **pages,
|
|
|
- struct vm_area_struct **vmas)
|
|
|
+ struct vm_area_struct **vmas, int *locked)
|
|
|
{
|
|
|
return __get_user_pages_locked(tsk, mm, start, nr_pages, pages, vmas,
|
|
|
- NULL, false,
|
|
|
+ locked, true,
|
|
|
gup_flags | FOLL_TOUCH | FOLL_REMOTE);
|
|
|
}
|
|
|
EXPORT_SYMBOL(get_user_pages_remote);
|
|
@@ -971,8 +974,9 @@ EXPORT_SYMBOL(get_user_pages_remote);
|
|
|
/*
|
|
|
* This is the same as get_user_pages_remote(), just with a
|
|
|
* less-flexible calling convention where we assume that the task
|
|
|
- * and mm being operated on are the current task's. We also
|
|
|
- * obviously don't pass FOLL_REMOTE in here.
|
|
|
+ * and mm being operated on are the current task's and don't allow
|
|
|
+ * passing of a locked parameter. We also obviously don't pass
|
|
|
+ * FOLL_REMOTE in here.
|
|
|
*/
|
|
|
long get_user_pages(unsigned long start, unsigned long nr_pages,
|
|
|
unsigned int gup_flags, struct page **pages,
|