Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Move sysctl routines from init_sysctl.c to kern_descrip....



details:   https://anonhg.NetBSD.org/src/rev/e5a2f4b749c4
branches:  trunk
changeset: 761463:e5a2f4b749c4
user:      pooka <pooka%NetBSD.org@localhost>
date:      Fri Jan 28 18:44:44 2011 +0000

description:
Move sysctl routines from init_sysctl.c to kern_descrip.c (for
descriptors) and kern_proc.c (for processes).  This makes them
usable in a rump kernel, in case somebody was wondering.

diffstat:

 sys/kern/init_main.c    |     6 +-
 sys/kern/init_sysctl.c  |  1233 +----------------------------------------------
 sys/kern/kern_descrip.c |   412 +++++++++++++++-
 sys/kern/kern_proc.c    |   876 +++++++++++++++++++++++++++++++++-
 sys/kern/kern_sysctl.c  |    22 +-
 sys/sys/proc.h          |     3 +-
 sys/sys/sysctl.h        |    10 +-
 7 files changed, 1318 insertions(+), 1244 deletions(-)

diffs (truncated from 2844 to 300 lines):

diff -r 65e0e2fbbb72 -r e5a2f4b749c4 sys/kern/init_main.c
--- a/sys/kern/init_main.c      Fri Jan 28 17:57:03 2011 +0000
+++ b/sys/kern/init_main.c      Fri Jan 28 18:44:44 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: init_main.c,v 1.426 2011/01/18 08:18:43 matt Exp $     */
+/*     $NetBSD: init_main.c,v 1.427 2011/01/28 18:44:44 pooka Exp $    */
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.426 2011/01/18 08:18:43 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.427 2011/01/28 18:44:44 pooka Exp $");
 
 #include "opt_ddb.h"
 #include "opt_ipsec.h"
@@ -584,6 +584,8 @@
 
        machdep_init();
 
+       procinit_sysctl();
+
        /*
         * Create process 1 (init(8)).  We do this now, as Unix has
         * historically had init be process 1, and changing this would
diff -r 65e0e2fbbb72 -r e5a2f4b749c4 sys/kern/init_sysctl.c
--- a/sys/kern/init_sysctl.c    Fri Jan 28 17:57:03 2011 +0000
+++ b/sys/kern/init_sysctl.c    Fri Jan 28 18:44:44 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: init_sysctl.c,v 1.176 2011/01/22 20:54:43 christos Exp $ */
+/*     $NetBSD: init_sysctl.c,v 1.177 2011/01/28 18:44:44 pooka Exp $ */
 
 /*-
  * Copyright (c) 2003, 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_sysctl.c,v 1.176 2011/01/22 20:54:43 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_sysctl.c,v 1.177 2011/01/28 18:44:44 pooka Exp $");
 
 #include "opt_sysv.h"
 #include "opt_compat_netbsd32.h"
@@ -96,10 +96,6 @@
 gid_t security_setidcore_group = 0;
 mode_t security_setidcore_mode = (S_IRUSR|S_IWUSR);
 
-/* Initialized in sysctl_init() for now... */
-extern kmutex_t sysctl_file_marker_lock;
-static u_int sysctl_file_marker = 1;
-
 static const u_int sysctl_flagmap[] = {
        PK_ADVLOCK, P_ADVLOCK,
        PK_EXEC, P_EXEC,
@@ -139,13 +135,6 @@
 
 };
 
-static const u_int sysctl_lwpflagmap[] = {
-       LW_SINTR, L_SINTR,
-       LW_SYSTEM, L_SYSTEM,
-       LW_SA, L_SA,    /* WRS ??? */
-       0
-};
-
 static const u_int sysctl_lwpprflagmap[] = {
        LPR_DETACHED, L_DETACHED,
        0
@@ -154,7 +143,6 @@
 /*
  * try over estimating by 5 procs/lwps
  */
-#define KERN_PROCSLOP  (5 * sizeof(struct kinfo_proc))
 #define KERN_LWPSLOP   (5 * sizeof(struct kinfo_lwp))
 
 static int dcopyout(struct lwp *, const void *, void *, size_t);
@@ -179,7 +167,6 @@
 static int sysctl_kern_hostid(SYSCTLFN_PROTO);
 static int sysctl_setlen(SYSCTLFN_PROTO);
 static int sysctl_kern_clockrate(SYSCTLFN_PROTO);
-static int sysctl_kern_file(SYSCTLFN_PROTO);
 static int sysctl_msgbuf(SYSCTLFN_PROTO);
 static int sysctl_kern_defcorename(SYSCTLFN_PROTO);
 static int sysctl_kern_cptime(SYSCTLFN_PROTO);
@@ -193,20 +180,13 @@
 static int sysctl_kern_forkfsleep(SYSCTLFN_PROTO);
 static int sysctl_kern_root_partition(SYSCTLFN_PROTO);
 static int sysctl_kern_drivers(SYSCTLFN_PROTO);
-static int sysctl_kern_file2(SYSCTLFN_PROTO);
 static int sysctl_security_setidcore(SYSCTLFN_PROTO);
 static int sysctl_security_setidcorename(SYSCTLFN_PROTO);
 static int sysctl_kern_cpid(SYSCTLFN_PROTO);
-static int sysctl_doeproc(SYSCTLFN_PROTO);
-static int sysctl_kern_proc_args(SYSCTLFN_PROTO);
 static int sysctl_hw_usermem(SYSCTLFN_PROTO);
 static int sysctl_hw_cnmagic(SYSCTLFN_PROTO);
 
-static u_int sysctl_map_flags(const u_int *, u_int);
-static void fill_kproc2(struct proc *, struct kinfo_proc2 *, bool);
 static void fill_lwp(struct lwp *l, struct kinfo_lwp *kl);
-static void fill_file(struct kinfo_file *, const file_t *, const fdfile_t *,
-                     int, pid_t);
 
 /*
  * ********************************************************************
@@ -313,12 +293,6 @@
                       SYSCTL_DESCR("System vnode table"),
                       sysctl_kern_vnode, 0, NULL, 0,
                       CTL_KERN, KERN_VNODE, CTL_EOL);
-       sysctl_createv(clog, 0, NULL, NULL,
-                      CTLFLAG_PERMANENT,
-                      CTLTYPE_STRUCT, "file",
-                      SYSCTL_DESCR("System open file table"),
-                      sysctl_kern_file, 0, NULL, 0,
-                      CTL_KERN, KERN_FILE, CTL_EOL);
 #ifndef GPROF
        sysctl_createv(clog, 0, NULL, NULL,
                       CTLFLAG_PERMANENT,
@@ -712,12 +686,6 @@
                       CTL_KERN, KERN_DRIVERS, CTL_EOL);
        sysctl_createv(clog, 0, NULL, NULL,
                       CTLFLAG_PERMANENT,
-                      CTLTYPE_STRUCT, "file2",
-                      SYSCTL_DESCR("System open file table"),
-                      sysctl_kern_file2, 0, NULL, 0,
-                      CTL_KERN, KERN_FILE2, CTL_EOL);
-       sysctl_createv(clog, 0, NULL, NULL,
-                      CTLFLAG_PERMANENT,
                       CTLTYPE_STRUCT, "cp_id",
                       SYSCTL_DESCR("Mapping of CPU number to CPU id"),
                       sysctl_kern_cpid, 0, NULL, 0,
@@ -801,52 +769,6 @@
                        CTL_CREATE, CTL_EOL);
 }
 
-SYSCTL_SETUP(sysctl_kern_proc_setup,
-            "sysctl kern.proc/proc2/proc_args subtree setup")
-{
-
-       sysctl_createv(clog, 0, NULL, NULL,
-                      CTLFLAG_PERMANENT,
-                      CTLTYPE_NODE, "kern", NULL,
-                      NULL, 0, NULL, 0,
-                      CTL_KERN, CTL_EOL);
-
-       sysctl_createv(clog, 0, NULL, NULL,
-                      CTLFLAG_PERMANENT,
-                      CTLTYPE_NODE, "proc",
-                      SYSCTL_DESCR("System-wide process information"),
-                      sysctl_doeproc, 0, NULL, 0,
-                      CTL_KERN, KERN_PROC, CTL_EOL);
-       sysctl_createv(clog, 0, NULL, NULL,
-                      CTLFLAG_PERMANENT,
-                      CTLTYPE_NODE, "proc2",
-                      SYSCTL_DESCR("Machine-independent process information"),
-                      sysctl_doeproc, 0, NULL, 0,
-                      CTL_KERN, KERN_PROC2, CTL_EOL);
-       sysctl_createv(clog, 0, NULL, NULL,
-                      CTLFLAG_PERMANENT,
-                      CTLTYPE_NODE, "proc_args",
-                      SYSCTL_DESCR("Process argument information"),
-                      sysctl_kern_proc_args, 0, NULL, 0,
-                      CTL_KERN, KERN_PROC_ARGS, CTL_EOL);
-
-       /*
-         "nodes" under these:
-
-         KERN_PROC_ALL
-         KERN_PROC_PID pid
-         KERN_PROC_PGRP pgrp
-         KERN_PROC_SESSION sess
-         KERN_PROC_TTY tty
-         KERN_PROC_UID uid
-         KERN_PROC_RUID uid
-         KERN_PROC_GID gid
-         KERN_PROC_RGID gid
-
-         all in all, probably not worth the effort...
-       */
-}
-
 SYSCTL_SETUP(sysctl_hw_setup, "sysctl hw subtree setup")
 {
        u_int u;
@@ -1217,185 +1139,6 @@
 }
 
 /*
- * Expects to be called with proc_lock and sysctl_file_marker_lock locked.
- */
-static void
-sysctl_file_marker_reset(void)
-{
-       struct proc *p;
-
-       PROCLIST_FOREACH(p, &allproc) {
-               struct filedesc *fd = p->p_fd;
-               fdtab_t *dt;
-               u_int i;
-
-               mutex_enter(&fd->fd_lock);
-
-               dt = fd->fd_dt;
-               for (i = 0; i < dt->dt_nfiles; i++) {
-                       struct file *fp;
-                       fdfile_t *ff;
-
-                       if ((ff = dt->dt_ff[i]) == NULL) {
-                               continue;
-                       }
-
-                       if ((fp = ff->ff_file) == NULL) {
-                               continue;
-                       }
-
-                       fp->f_marker = 0;
-               }
-
-               mutex_exit(&fd->fd_lock);
-       }
-}
-
-/*
- * sysctl helper routine for kern.file pseudo-subtree.
- */
-static int
-sysctl_kern_file(SYSCTLFN_ARGS)
-{
-       int error;
-       size_t buflen;
-       struct file *fp, fbuf;
-       char *start, *where;
-       struct proc *p;
-
-       start = where = oldp;
-       buflen = *oldlenp;
-       
-       if (where == NULL) {
-               /*
-                * overestimate by 10 files
-                */
-               *oldlenp = sizeof(filehead) + (nfiles + 10) *
-                   sizeof(struct file);
-               return (0);
-       }
-
-       /*
-        * first dcopyout filehead
-        */
-       if (buflen < sizeof(filehead)) {
-               *oldlenp = 0;
-               return (0);
-       }
-       sysctl_unlock();
-       error = dcopyout(l, &filehead, where, sizeof(filehead));
-       if (error) {
-               sysctl_relock();
-               return error;
-       }
-       buflen -= sizeof(filehead);
-       where += sizeof(filehead);
-
-       /*
-        * followed by an array of file structures
-        */
-       mutex_enter(&sysctl_file_marker_lock);
-       mutex_enter(proc_lock);
-       PROCLIST_FOREACH(p, &allproc) {
-               struct filedesc *fd;
-               fdtab_t *dt;
-               u_int i;
-
-               if (p->p_stat == SIDL) {
-                       /* skip embryonic processes */
-                       continue;
-               }
-               mutex_enter(p->p_lock);
-               error = kauth_authorize_process(l->l_cred,
-                   KAUTH_PROCESS_CANSEE, p,
-                   KAUTH_ARG(KAUTH_REQ_PROCESS_CANSEE_OPENFILES),
-                   NULL, NULL);
-               mutex_exit(p->p_lock);
-               if (error != 0) {
-                       /*
-                        * Don't leak kauth retval if we're silently
-                        * skipping this entry.
-                        */
-                       error = 0;
-                       continue;
-               }
-
-               /*
-                * Grab a hold on the process.
-                */
-               if (!rw_tryenter(&p->p_reflock, RW_READER)) {
-                       continue;
-               }
-               mutex_exit(proc_lock);



Home | Main Index | Thread Index | Old Index