|
@@ -1,3 +1,4 @@
|
|
|
+#define __DISABLE_GUP_DEPRECATED 1
|
|
|
#include <linux/kernel.h>
|
|
|
#include <linux/errno.h>
|
|
|
#include <linux/err.h>
|
|
@@ -807,15 +808,15 @@ static __always_inline long __get_user_pages_locked(struct task_struct *tsk,
|
|
|
* if (locked)
|
|
|
* up_read(&mm->mmap_sem);
|
|
|
*/
|
|
|
-long get_user_pages_locked(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
- unsigned long start, unsigned long nr_pages,
|
|
|
+long get_user_pages_locked6(unsigned long start, unsigned long nr_pages,
|
|
|
int write, int force, struct page **pages,
|
|
|
int *locked)
|
|
|
{
|
|
|
- return __get_user_pages_locked(tsk, mm, start, nr_pages, write, force,
|
|
|
- pages, NULL, locked, true, FOLL_TOUCH);
|
|
|
+ return __get_user_pages_locked(current, current->mm, start, nr_pages,
|
|
|
+ write, force, pages, NULL, locked, true,
|
|
|
+ FOLL_TOUCH);
|
|
|
}
|
|
|
-EXPORT_SYMBOL(get_user_pages_locked);
|
|
|
+EXPORT_SYMBOL(get_user_pages_locked6);
|
|
|
|
|
|
/*
|
|
|
* Same as get_user_pages_unlocked(...., FOLL_TOUCH) but it allows to
|
|
@@ -860,14 +861,13 @@ EXPORT_SYMBOL(__get_user_pages_unlocked);
|
|
|
* or if "force" shall be set to 1 (get_user_pages_fast misses the
|
|
|
* "force" parameter).
|
|
|
*/
|
|
|
-long get_user_pages_unlocked(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
- unsigned long start, unsigned long nr_pages,
|
|
|
+long get_user_pages_unlocked5(unsigned long start, unsigned long nr_pages,
|
|
|
int write, int force, struct page **pages)
|
|
|
{
|
|
|
- return __get_user_pages_unlocked(tsk, mm, start, nr_pages, write,
|
|
|
- force, pages, FOLL_TOUCH);
|
|
|
+ return __get_user_pages_unlocked(current, current->mm, start, nr_pages,
|
|
|
+ write, force, pages, FOLL_TOUCH);
|
|
|
}
|
|
|
-EXPORT_SYMBOL(get_user_pages_unlocked);
|
|
|
+EXPORT_SYMBOL(get_user_pages_unlocked5);
|
|
|
|
|
|
/*
|
|
|
* get_user_pages_remote() - pin user pages in memory
|
|
@@ -939,16 +939,15 @@ EXPORT_SYMBOL(get_user_pages_remote);
|
|
|
* This is the same as get_user_pages_remote() for the time
|
|
|
* being.
|
|
|
*/
|
|
|
-long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
- unsigned long start, unsigned long nr_pages,
|
|
|
+long get_user_pages6(unsigned long start, unsigned long nr_pages,
|
|
|
int write, int force, struct page **pages,
|
|
|
struct vm_area_struct **vmas)
|
|
|
{
|
|
|
- return __get_user_pages_locked(tsk, mm, start, nr_pages,
|
|
|
+ return __get_user_pages_locked(current, current->mm, start, nr_pages,
|
|
|
write, force, pages, vmas, NULL, false,
|
|
|
FOLL_TOUCH);
|
|
|
}
|
|
|
-EXPORT_SYMBOL(get_user_pages);
|
|
|
+EXPORT_SYMBOL(get_user_pages6);
|
|
|
|
|
|
/**
|
|
|
* populate_vma_page_range() - populate a range of pages in the vma.
|
|
@@ -1484,3 +1483,38 @@ int get_user_pages_fast(unsigned long start, int nr_pages, int write,
|
|
|
}
|
|
|
|
|
|
#endif /* CONFIG_HAVE_GENERIC_RCU_GUP */
|
|
|
+
|
|
|
+long get_user_pages8(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
+ unsigned long start, unsigned long nr_pages,
|
|
|
+ int write, int force, struct page **pages,
|
|
|
+ struct vm_area_struct **vmas)
|
|
|
+{
|
|
|
+ WARN_ONCE(tsk != current, "get_user_pages() called on remote task");
|
|
|
+ WARN_ONCE(mm != current->mm, "get_user_pages() called on remote mm");
|
|
|
+
|
|
|
+ return get_user_pages6(start, nr_pages, write, force, pages, vmas);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(get_user_pages8);
|
|
|
+
|
|
|
+long get_user_pages_locked8(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
+ unsigned long start, unsigned long nr_pages,
|
|
|
+ int write, int force, struct page **pages, int *locked)
|
|
|
+{
|
|
|
+ WARN_ONCE(tsk != current, "get_user_pages_locked() called on remote task");
|
|
|
+ WARN_ONCE(mm != current->mm, "get_user_pages_locked() called on remote mm");
|
|
|
+
|
|
|
+ return get_user_pages_locked6(start, nr_pages, write, force, pages, locked);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(get_user_pages_locked8);
|
|
|
+
|
|
|
+long get_user_pages_unlocked7(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
+ unsigned long start, unsigned long nr_pages,
|
|
|
+ int write, int force, struct page **pages)
|
|
|
+{
|
|
|
+ WARN_ONCE(tsk != current, "get_user_pages_unlocked() called on remote task");
|
|
|
+ WARN_ONCE(mm != current->mm, "get_user_pages_unlocked() called on remote mm");
|
|
|
+
|
|
|
+ return get_user_pages_unlocked5(start, nr_pages, write, force, pages);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(get_user_pages_unlocked7);
|
|
|
+
|