svn commit: r317588 - in stable/11/sys: sys vm

Dmitry Chagin dchagin at FreeBSD.org
Sat Apr 29 09:20:06 UTC 2017


Author: dchagin
Date: Sat Apr 29 09:20:04 2017
New Revision: 317588
URL: https://svnweb.freebsd.org/changeset/base/317588

Log:
  MFC r316288:
  
  Add kern_mincore() helper for mincore() syscall.

Modified:
  stable/11/sys/sys/syscallsubr.h
  stable/11/sys/vm/vm_mmap.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/sys/syscallsubr.h
==============================================================================
--- stable/11/sys/sys/syscallsubr.h	Sat Apr 29 09:18:55 2017	(r317587)
+++ stable/11/sys/sys/syscallsubr.h	Sat Apr 29 09:20:04 2017	(r317588)
@@ -151,6 +151,7 @@ int	kern_lseek(struct thread *td, int fd
 int	kern_lutimes(struct thread *td, char *path, enum uio_seg pathseg,
 	    struct timeval *tptr, enum uio_seg tptrseg);
 int	kern_madvise(struct thread *td, uintptr_t addr, size_t len, int behav);
+int	kern_mincore(struct thread *td, uintptr_t addr, size_t len, char *vec);
 int	kern_mkdirat(struct thread *td, int fd, char *path,
 	    enum uio_seg segflg, int mode);
 int	kern_mkfifoat(struct thread *td, int fd, char *path,

Modified: stable/11/sys/vm/vm_mmap.c
==============================================================================
--- stable/11/sys/vm/vm_mmap.c	Sat Apr 29 09:18:55 2017	(r317587)
+++ stable/11/sys/vm/vm_mmap.c	Sat Apr 29 09:20:04 2017	(r317588)
@@ -711,11 +711,17 @@ struct mincore_args {
 int
 sys_mincore(struct thread *td, struct mincore_args *uap)
 {
+
+	return (kern_mincore(td, (uintptr_t)uap->addr, uap->len, uap->vec));
+}
+
+int
+kern_mincore(struct thread *td, uintptr_t addr0, size_t len, char *vec)
+{
 	vm_offset_t addr, first_addr;
 	vm_offset_t end, cend;
 	pmap_t pmap;
 	vm_map_t map;
-	char *vec;
 	int error = 0;
 	int vecindex, lastvecindex;
 	vm_map_entry_t current;
@@ -732,17 +738,12 @@ sys_mincore(struct thread *td, struct mi
 	 * Make sure that the addresses presented are valid for user
 	 * mode.
 	 */
-	first_addr = addr = trunc_page((vm_offset_t) uap->addr);
-	end = addr + (vm_size_t)round_page(uap->len);
+	first_addr = addr = trunc_page(addr0);
+	end = addr + (vm_size_t)round_page(len);
 	map = &td->td_proc->p_vmspace->vm_map;
 	if (end > vm_map_max(map) || end < addr)
 		return (ENOMEM);
 
-	/*
-	 * Address of byte vector
-	 */
-	vec = uap->vec;
-
 	pmap = vmspace_pmap(td->td_proc->p_vmspace);
 
 	vm_map_lock_read(map);


More information about the svn-src-all mailing list