At some point the function prototype changed from this:
long get_user_pages(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);
into this:
long get_user_pages(unsigned long start, unsigned long nr_pages,
unsigned int gup_flags, struct page **pages,
struct vm_area_struct **vmas);
With the individual 'write' and 'force' flags transforming into gup_flags per
this patch:
https://patchwork.kernel.org/project/linux-arm-kernel/patch/
20161013002020.3062-7-lstoakes@gmail.com/
// pin the user pages; use semaphores on linux for doing the same
down_read(¤t->mm->mmap_sem);
// pin the user pages; use semaphores on linux for doing the same
down_read(¤t->mm->mmap_sem);
- *nf_pages = (int32_t)get_user_pages(current, current->mm, (uint64_t)data,
- nr_pages, PROT_WRITE, 1, pages, NULL);
+ *nf_pages = (int32_t)get_user_pages((uint64_t)data, nr_pages,
+ (FOLL_WRITE | FOLL_FORCE), pages, NULL);
up_read(¤t->mm->mmap_sem);
// compare if the no of final pages is equal to no of requested pages
up_read(¤t->mm->mmap_sem);
// compare if the no of final pages is equal to no of requested pages