Author: dchagin
Date: Thu Mar 30 19:42:49 2017
New Revision: 316288
URL: https://svnweb.freebsd.org/changeset/base/316288

Log:
  Add kern_mincore() helper for micore() syscall.
  
  Suggested by: kib@
  Reviewed by:  kib@
  MFC after:    1 month
  Differential Revision:        https://reviews.freebsd.org/D10143

Modified:
  head/sys/sys/syscallsubr.h
  head/sys/vm/vm_mmap.c

Modified: head/sys/sys/syscallsubr.h
==============================================================================
--- head/sys/sys/syscallsubr.h  Thu Mar 30 19:32:25 2017        (r316287)
+++ head/sys/sys/syscallsubr.h  Thu Mar 30 19:42:49 2017        (r316288)
@@ -152,6 +152,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: head/sys/vm/vm_mmap.c
==============================================================================
--- head/sys/vm/vm_mmap.c       Thu Mar 30 19:32:25 2017        (r316287)
+++ head/sys/vm/vm_mmap.c       Thu Mar 30 19:42:49 2017        (r316288)
@@ -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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to