diff options
Diffstat (limited to 'mm/memory.c')
| -rw-r--r-- | mm/memory.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/mm/memory.c b/mm/memory.c index fc1987dfd8cc..e18c57bdc75c 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3869,10 +3869,11 @@ EXPORT_SYMBOL_GPL(generic_access_phys);   * given task for page fault accounting.   */  static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm, -		unsigned long addr, void *buf, int len, int write) +		unsigned long addr, void *buf, int len, unsigned int gup_flags)  {  	struct vm_area_struct *vma;  	void *old_buf = buf; +	int write = gup_flags & FOLL_WRITE;  	down_read(&mm->mmap_sem);  	/* ignore errors, just check how much was successfully transferred */ @@ -3882,7 +3883,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,  		struct page *page = NULL;  		ret = get_user_pages_remote(tsk, mm, addr, 1, -				write, 1, &page, &vma); +				gup_flags, &page, &vma);  		if (ret <= 0) {  #ifndef CONFIG_HAVE_IOREMAP_PROT  			break; @@ -3934,14 +3935,14 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,   * @addr:	start address to access   * @buf:	source or destination buffer   * @len:	number of bytes to transfer - * @write:	whether the access is a write + * @gup_flags:	flags modifying lookup behaviour   *   * The caller must hold a reference on @mm.   */  int access_remote_vm(struct mm_struct *mm, unsigned long addr, -		void *buf, int len, int write) +		void *buf, int len, unsigned int gup_flags)  { -	return __access_remote_vm(NULL, mm, addr, buf, len, write); +	return __access_remote_vm(NULL, mm, addr, buf, len, gup_flags);  }  /* @@ -3950,7 +3951,7 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,   * Do not walk the page table directly, use get_user_pages   */  int access_process_vm(struct task_struct *tsk, unsigned long addr, -		void *buf, int len, int write) +		void *buf, int len, unsigned int gup_flags)  {  	struct mm_struct *mm;  	int ret; @@ -3959,7 +3960,8 @@ int access_process_vm(struct task_struct *tsk, unsigned long addr,  	if (!mm)  		return 0; -	ret = __access_remote_vm(tsk, mm, addr, buf, len, write); +	ret = __access_remote_vm(tsk, mm, addr, buf, len, gup_flags); +  	mmput(mm);  	return ret;  | 
