Author: dchagin
Date: Sun May 24 15:03:09 2015
New Revision: 283391
URL: https://svnweb.freebsd.org/changeset/base/283391

Log:
  To reduce code duplication introduce linux_copyout_rusage() method.
  Use it in linux_wait4() system call and move linux_wait4() to the MI path.
  While here add a prototype for the static bsd_to_linux_rusage().
  
  Differential Revision:        https://reviews.freebsd.org/D2138
  Reviewed by:  trasz

Modified:
  head/sys/amd64/linux32/linux.h
  head/sys/amd64/linux32/linux32_genassym.c
  head/sys/amd64/linux32/linux32_machdep.c
  head/sys/compat/linux/linux_misc.c
  head/sys/i386/linux/linux.h
  head/sys/i386/linux/linux_machdep.c

Modified: head/sys/amd64/linux32/linux.h
==============================================================================
--- head/sys/amd64/linux32/linux.h      Sun May 24 15:00:27 2015        
(r283390)
+++ head/sys/amd64/linux32/linux.h      Sun May 24 15:03:09 2015        
(r283391)
@@ -780,6 +780,7 @@ struct l_iovec32 {
 
 int linux32_copyiniov(struct l_iovec32 *iovp32, l_ulong iovcnt,
                            struct iovec **iovp, int error);
+int linux_copyout_rusage(struct rusage *ru, void *uaddr);
 
 /* robust futexes */
 struct linux_robust_list {

Modified: head/sys/amd64/linux32/linux32_genassym.c
==============================================================================
--- head/sys/amd64/linux32/linux32_genassym.c   Sun May 24 15:00:27 2015        
(r283390)
+++ head/sys/amd64/linux32/linux32_genassym.c   Sun May 24 15:03:09 2015        
(r283391)
@@ -3,6 +3,7 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/assym.h>
+#include <sys/resource.h>
 #include <sys/systm.h>
 
 #include <amd64/linux32/linux.h>

Modified: head/sys/amd64/linux32/linux32_machdep.c
==============================================================================
--- head/sys/amd64/linux32/linux32_machdep.c    Sun May 24 15:00:27 2015        
(r283390)
+++ head/sys/amd64/linux32/linux32_machdep.c    Sun May 24 15:03:09 2015        
(r283391)
@@ -72,6 +72,8 @@ __FBSDID("$FreeBSD$");
 #include <compat/linux/linux_util.h>
 #include <compat/linux/linux_emul.h>
 
+static void    bsd_to_linux_rusage(struct rusage *ru, struct l_rusage *lru);
+
 struct l_old_select_argv {
        l_int           nfds;
        l_uintptr_t     readfds;
@@ -133,6 +135,16 @@ bsd_to_linux_rusage(struct rusage *ru, s
 }
 
 int
+linux_copyout_rusage(struct rusage *ru, void *uaddr)
+{
+       struct l_rusage lru;
+
+       bsd_to_linux_rusage(ru, &lru);
+
+       return (copyout(&lru, uaddr, sizeof(struct l_rusage)));
+}
+
+int
 linux_execve(struct thread *td, struct linux_execve_args *args)
 {
        struct image_args eargs;
@@ -908,17 +920,14 @@ linux_settimeofday(struct thread *td, st
 int
 linux_getrusage(struct thread *td, struct linux_getrusage_args *uap)
 {
-       struct l_rusage s32;
        struct rusage s;
        int error;
 
        error = kern_getrusage(td, uap->who, &s);
        if (error != 0)
                return (error);
-       if (uap->rusage != NULL) {
-               bsd_to_linux_rusage(&s, &s32);
-               error = copyout(&s32, uap->rusage, sizeof(s32));
-       }
+       if (uap->rusage != NULL)
+               error = linux_copyout_rusage(&s, uap->rusage);
        return (error);
 }
 
@@ -1024,37 +1033,3 @@ linux_set_thread_area(struct thread *td,
 
        return (0);
 }
-
-int
-linux_wait4(struct thread *td, struct linux_wait4_args *args)
-{
-       int error, options;
-       struct rusage ru, *rup;
-       struct l_rusage lru;
-
-#ifdef DEBUG
-       if (ldebug(wait4))
-               printf(ARGS(wait4, "%d, %p, %d, %p"),
-                   args->pid, (void *)args->status, args->options,
-                   (void *)args->rusage);
-#endif
-
-       options = (args->options & (WNOHANG | WUNTRACED));
-       /* WLINUXCLONE should be equal to __WCLONE, but we make sure */
-       if (args->options & __WCLONE)
-               options |= WLINUXCLONE;
-
-       if (args->rusage != NULL)
-               rup = &ru;
-       else
-               rup = NULL;
-       error = linux_common_wait(td, args->pid, args->status, options, rup);
-       if (error)
-               return (error);
-       if (args->rusage != NULL) {
-               bsd_to_linux_rusage(rup, &lru);
-               error = copyout(&lru, args->rusage, sizeof(lru));
-       }
-
-       return (error);
-}

Modified: head/sys/compat/linux/linux_misc.c
==============================================================================
--- head/sys/compat/linux/linux_misc.c  Sun May 24 15:00:27 2015        
(r283390)
+++ head/sys/compat/linux/linux_misc.c  Sun May 24 15:03:09 2015        
(r283391)
@@ -886,6 +886,35 @@ linux_waitpid(struct thread *td, struct 
        return (linux_common_wait(td, args->pid, args->status, options, NULL));
 }
 
+int
+linux_wait4(struct thread *td, struct linux_wait4_args *args)
+{
+       int error, options;
+       struct rusage ru, *rup;
+
+#ifdef DEBUG
+       if (ldebug(wait4))
+               printf(ARGS(wait4, "%d, %p, %d, %p"),
+                   args->pid, (void *)args->status, args->options,
+                   (void *)args->rusage);
+#endif
+
+       options = (args->options & (WNOHANG | WUNTRACED));
+       /* WLINUXCLONE should be equal to __WCLONE, but we make sure */
+       if (args->options & __WCLONE)
+               options |= WLINUXCLONE;
+
+       if (args->rusage != NULL)
+               rup = &ru;
+       else
+               rup = NULL;
+       error = linux_common_wait(td, args->pid, args->status, options, rup);
+       if (error != 0)
+               return (error);
+       if (args->rusage != NULL)
+               error = linux_copyout_rusage(&ru, args->rusage);
+       return (error);
+}
 
 int
 linux_mknod(struct thread *td, struct linux_mknod_args *args)

Modified: head/sys/i386/linux/linux.h
==============================================================================
--- head/sys/i386/linux/linux.h Sun May 24 15:00:27 2015        (r283390)
+++ head/sys/i386/linux/linux.h Sun May 24 15:03:09 2015        (r283391)
@@ -741,6 +741,8 @@ struct l_desc_struct {
 #define        LINUX_GET_USEABLE(desc)         \
        (((desc)->b >> LINUX_ENTRY_B_USEABLE) & 1)
 
+#define        linux_copyout_rusage(r, u)      copyout(r, u, sizeof(*r))
+
 /* robust futexes */
 struct linux_robust_list {
        struct linux_robust_list        *next;

Modified: head/sys/i386/linux/linux_machdep.c
==============================================================================
--- head/sys/i386/linux/linux_machdep.c Sun May 24 15:00:27 2015        
(r283390)
+++ head/sys/i386/linux/linux_machdep.c Sun May 24 15:03:09 2015        
(r283391)
@@ -1047,34 +1047,3 @@ linux_mq_getsetattr(struct thread *td, s
        return (ENOSYS);
 #endif
 }
-
-int
-linux_wait4(struct thread *td, struct linux_wait4_args *args)
-{
-       int error, options;
-       struct rusage ru, *rup;
-
-#ifdef DEBUG
-       if (ldebug(wait4))
-               printf(ARGS(wait4, "%d, %p, %d, %p"),
-                   args->pid, (void *)args->status, args->options,
-                   (void *)args->rusage);
-#endif
-
-       options = (args->options & (WNOHANG | WUNTRACED));
-       /* WLINUXCLONE should be equal to __WCLONE, but we make sure */
-       if (args->options & __WCLONE)
-               options |= WLINUXCLONE;
-
-       if (args->rusage != NULL)
-               rup = &ru;
-       else
-               rup = NULL;
-       error = linux_common_wait(td, args->pid, args->status, options, rup);
-       if (error)
-               return (error);
-       if (args->rusage != NULL)
-               error = copyout(&ru, args->rusage, sizeof(ru));
-
-       return (error);
-}
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to