kernel - Incidental MPLOCK removal
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 11 Jan 2017 17:47:56 +0000 (09:47 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 11 Jan 2017 17:47:56 +0000 (09:47 -0800)
* Remove misc #include <sys/mplock2.h> statements that are no longer needed.

* Replace mplock with acct_lock in kern_acct.c

* Replace mplock with msg_token in sysv_msg.c

* Replace mplock with p->p_token in the profiling code.

16 files changed:
sys/kern/kern_acct.c
sys/kern/kern_acl.c
sys/kern/kern_clock.c
sys/kern/kern_ktrace.c
sys/kern/kern_proc.c
sys/kern/kern_sensors.c
sys/kern/kern_sysctl.c
sys/kern/lwkt_thread.c
sys/kern/subr_diskiocom.c
sys/kern/subr_eventhandler.c
sys/kern/subr_input.c
sys/kern/subr_prof.c
sys/kern/sys_generic.c
sys/kern/sysv_msg.c
sys/kern/vfs_bio.c
sys/kern/vfs_cache.c

index 4d116dd..982a3d2 100644 (file)
@@ -55,7 +55,7 @@
 
 #include <vm/vm_zone.h>
 
-#include <sys/mplock2.h>
+struct lock acct_lock = LOCK_INITIALIZER("acct_lock", 0, 0);
 
 /*
  * The routines implemented in this file are described in:
@@ -106,7 +106,7 @@ SYSCTL_INT(_kern, OID_AUTO, acct_chkfreq, CTLFLAG_RW,
 static void
 acct_init(void *arg __unused)
 {
-       callout_init(&acctwatch_handle);
+       callout_init_lk(&acctwatch_handle, &acct_lock);
 }
 SYSINIT(acct, SI_SUB_DRIVERS, SI_ORDER_ANY, acct_init, NULL);
 
@@ -130,7 +130,7 @@ sys_acct(struct acct_args *uap)
        if (error)
                return (error);
 
-       get_mplock();
+       lockmgr(&acct_lock, LK_EXCLUSIVE);
 
        /*
         * If accounting is to be started to a file, open that file for
@@ -181,7 +181,8 @@ sys_acct(struct acct_args *uap)
        acctp = vp;
        acctwatch(NULL);
 done:
-       rel_mplock();
+       lockmgr(&acct_lock, LK_RELEASE);
+
        return (error);
 }
 
@@ -201,12 +202,21 @@ acct_process(struct proc *p)
        struct timeval tmp;
        struct rlimit rlim;
        int t;
+       int error;
        struct vnode *vp;
 
-       /* If accounting isn't enabled, don't bother */
+       /*
+        * If accounting isn't enabled, don't bother.  Lock acct_lock
+        * make sure.
+        */
+       if (acctp == NULLVP)
+               return 0;
+       lockmgr(&acct_lock, LK_SHARED);
        vp = acctp;
-       if (vp == NULLVP)
-               return (0);
+       if (vp == NULLVP) {
+               lockmgr(&acct_lock, LK_RELEASE);
+               return 0;
+       }
 
        /*
         * Get process accounting information.
@@ -262,9 +272,12 @@ acct_process(struct proc *p)
        /*
         * Write the accounting information to the file.
         */
-       return (vn_rdwr(UIO_WRITE, vp, (caddr_t)&acct, sizeof (acct),
-           (off_t)0, UIO_SYSSPACE, IO_APPEND|IO_UNIT, p->p_ucred,
-           NULL));
+       error = vn_rdwr(UIO_WRITE, vp, (caddr_t)&acct, sizeof (acct),
+                       (off_t)0, UIO_SYSSPACE, IO_APPEND|IO_UNIT, p->p_ucred,
+                       NULL);
+       lockmgr(&acct_lock, LK_RELEASE);
+
+       return error;
 }
 
 /*
index cdb9dfc..2794b15 100644 (file)
@@ -47,8 +47,6 @@
 #include <sys/stat.h>
 #include <sys/acl.h>
 
-#include <sys/mplock2.h>
-
 static int vacl_set_acl(struct vnode *vp, acl_type_t type, struct acl *aclp);
 static int vacl_get_acl(struct vnode *vp, acl_type_t type, struct acl *aclp);
 static int vacl_aclcheck(struct vnode *vp, acl_type_t type, struct acl *aclp);
index b962009..6768275 100644 (file)
@@ -94,7 +94,6 @@
 #include <sys/sysctl.h>
 
 #include <sys/thread2.h>
-#include <sys/mplock2.h>
 #include <sys/spinlock2.h>
 
 #include <machine/cpu.h>
@@ -1078,6 +1077,8 @@ tstohz_low(struct timespec *ts)
 /*
  * Start profiling on a process.
  *
+ * Caller must hold p->p_token();
+ *
  * Kernel profiling passes proc0 which never exits and hence
  * keeps the profile clock running constantly.
  */
index 4985d1b..fdddb89 100644 (file)
@@ -48,8 +48,6 @@
 
 #include <vm/vm_zone.h>
 
-#include <sys/mplock2.h>
-
 static MALLOC_DEFINE(M_KTRACE, "KTRACE", "KTRACE");
 
 #ifdef KTRACE
@@ -270,8 +268,9 @@ sys_ktrace(struct ktrace_args *uap)
        struct nlookupdata nd;
        ktrace_node_t tracenode = NULL;
 
-       get_mplock();
+       lwkt_gettoken(&curp->p_token);
        curp->p_traceflag |= KTRFAC_ACTIVE;
+
        if (ops != KTROP_CLEAR) {
                /*
                 * an operation which requires a file argument.
@@ -359,7 +358,7 @@ done:
        if (tracenode)
                ktrdestroy(&tracenode);
        curp->p_traceflag &= ~KTRFAC_ACTIVE;
-       rel_mplock();
+       lwkt_reltoken(&curp->p_token);
        return (error);
 #else
        return ENOSYS;
index bbd0018..1f0513b 100644 (file)
@@ -51,7 +51,6 @@
 
 #include <sys/refcount.h>
 #include <sys/spinlock2.h>
-#include <sys/mplock2.h>
 
 /*
  * Hash table size must be a power of two and is not currently dynamically
index a3a4109..9fd5f4e 100644 (file)
@@ -35,8 +35,6 @@
 #include <sys/sysctl.h>
 #include <sys/sensors.h>
 
-#include <sys/mplock2.h>
-
 static int             sensordev_idmax;
 static TAILQ_HEAD(sensordev_list, ksensordev) sensordev_list =
     TAILQ_HEAD_INITIALIZER(sensordev_list);
index 2b420ae..a7dc095 100644 (file)
@@ -48,8 +48,6 @@
 #include <sys/lock.h>
 #include <sys/sbuf.h>
 
-#include <sys/mplock2.h>
-
 #include <vm/vm.h>
 #include <vm/vm_extern.h>
 
index 267a911..46faf9a 100644 (file)
@@ -55,7 +55,6 @@
 
 #include <sys/thread2.h>
 #include <sys/spinlock2.h>
-#include <sys/mplock2.h>
 
 #include <sys/dsched.h>
 
index f4e2bfb..946c360 100644 (file)
@@ -55,7 +55,6 @@
 #include <sys/dmsg.h>
 
 #include <sys/buf2.h>
-#include <sys/mplock2.h>
 #include <sys/msgport2.h>
 #include <sys/thread2.h>
 
index 2edc3e3..86a856f 100644 (file)
@@ -34,8 +34,6 @@
 #include <sys/systm.h>
 #include <sys/eventhandler.h>
 
-#include <sys/mplock2.h>
-
 MALLOC_DEFINE(M_EVENTHANDLER, "eventhandler", "Event handler records");
 
 /* List of 'slow' lists */
index f59f9f7..f0e432a 100644 (file)
@@ -49,7 +49,6 @@
 #include <machine/stdarg.h>    /* for device_printf() */
 
 #include <sys/thread2.h>
-#include <sys/mplock2.h>
 #include <sys/input.h>
 
 MALLOC_DEFINE(M_INPUT, "input", "Input Event");
index 2fb8022..8eb3650 100644 (file)
@@ -39,7 +39,6 @@
 #include <sys/sysctl.h>
 
 #include <sys/thread2.h>
-#include <sys/mplock2.h>
 
 #include <machine/cpu.h>
 
@@ -351,7 +350,7 @@ sys_profil(struct profil_args *uap)
 
        if (uap->scale > (1 << 16))
                return (EINVAL);
-       get_mplock();
+       lwkt_gettoken(&p->p_token);
        if (uap->scale == 0) {
                stopprofclock(p);
        } else {
@@ -366,7 +365,8 @@ sys_profil(struct profil_args *uap)
                startprofclock(p);
                crit_exit();
        }
-       rel_mplock();
+       lwkt_reltoken(&p->p_token);
+
        return (0);
 }
 
index c7dfd6e..5cc2fd1 100644 (file)
@@ -67,7 +67,6 @@
 #include <vm/vm_page.h>
 
 #include <sys/file2.h>
-#include <sys/mplock2.h>
 #include <sys/spinlock2.h>
 
 #include <machine/limits.h>
index fff03a5..afe4787 100644 (file)
@@ -33,8 +33,6 @@
 #include <sys/malloc.h>
 #include <sys/jail.h>
 
-#include <sys/mplock2.h>
-
 static MALLOC_DEFINE(M_MSG, "msg", "SVID compatible message queues");
 
 static void msginit (void *);
@@ -118,6 +116,7 @@ static char *msgpool;               /* MSGMAX byte long msg buffer pool */
 static struct msgmap *msgmaps; /* MSGSEG msgmap structures */
 static struct msg *msghdrs;    /* MSGTQL msg headers */
 static struct msqid_ds *msqids;        /* MSGMNI msqid_ds struct's */
+static struct lwkt_token msg_token = LWKT_TOKEN_INITIALIZER(msg_token);
 
 static void
 msginit(void *dummy)
@@ -219,7 +218,7 @@ sys_msgctl(struct msgctl_args *uap)
        if (!jail_sysvipc_allowed && td->td_ucred->cr_prison != NULL)
                return (ENOSYS);
 
-       get_mplock();
+       lwkt_gettoken(&msg_token);
        msqid = IPCID_TO_IX(msqid);
 
        if (msqid < 0 || msqid >= msginfo.msgmni) {
@@ -332,7 +331,7 @@ sys_msgctl(struct msgctl_args *uap)
                break;
        }
 done:
-       rel_mplock();
+       lwkt_reltoken(&msg_token);
        if (eval == 0)
                uap->sysmsg_result = rval;
        return(eval);
@@ -358,7 +357,7 @@ sys_msgget(struct msgget_args *uap)
                return (ENOSYS);
 
        eval = 0;
-       get_mplock();
+       lwkt_gettoken(&msg_token);
 
        if (key != IPC_PRIVATE) {
                for (msqid = 0; msqid < msginfo.msgmni; msqid++) {
@@ -441,7 +440,7 @@ sys_msgget(struct msgget_args *uap)
        }
 
 done:
-       rel_mplock();
+       lwkt_reltoken(&msg_token);
        /* Construct the unique msqid */
        if (eval == 0)
                uap->sysmsg_result = IXSEQ_TO_IPCID(msqid, msqptr->msg_perm);
@@ -472,7 +471,7 @@ sys_msgsnd(struct msgsnd_args *uap)
        if (!jail_sysvipc_allowed && td->td_ucred->cr_prison != NULL)
                return (ENOSYS);
 
-       get_mplock();
+       lwkt_gettoken(&msg_token);
        msqid = IPCID_TO_IX(msqid);
 
        if (msqid < 0 || msqid >= msginfo.msgmni) {
@@ -773,7 +772,7 @@ sys_msgsnd(struct msgsnd_args *uap)
        wakeup((caddr_t)msqptr);
        eval = 0;
 done:
-       rel_mplock();
+       lwkt_reltoken(&msg_token);
        if (eval == 0)
                uap->sysmsg_result = 0;
        return (eval);
@@ -805,7 +804,7 @@ sys_msgrcv(struct msgrcv_args *uap)
        if (!jail_sysvipc_allowed && td->td_ucred->cr_prison != NULL)
                return (ENOSYS);
 
-       get_mplock();
+       lwkt_gettoken(&msg_token);
        msqid = IPCID_TO_IX(msqid);
 
        if (msqid < 0 || msqid >= msginfo.msgmni) {
@@ -1060,7 +1059,7 @@ sys_msgrcv(struct msgrcv_args *uap)
        wakeup((caddr_t)msqptr);
        eval = 0;
 done:
-       rel_mplock();
+       lwkt_reltoken(&msg_token);
        if (eval == 0)
                uap->sysmsg_result = msgsz;
        return(eval);
@@ -1069,9 +1068,8 @@ done:
 static int
 sysctl_msqids(SYSCTL_HANDLER_ARGS)
 {
-
        return (SYSCTL_OUT(req, msqids,
-           sizeof(struct msqid_ds) * msginfo.msgmni));
+               sizeof(struct msqid_ds) * msginfo.msgmni));
 }
 
 TUNABLE_INT("kern.ipc.msgseg", &msginfo.msgseg);
index 440a9f2..a83d5fd 100644 (file)
@@ -60,7 +60,6 @@
 #include <sys/buf2.h>
 #include <sys/thread2.h>
 #include <sys/spinlock2.h>
-#include <sys/mplock2.h>
 #include <vm/vm_page2.h>
 
 #include "opt_ddb.h"
index ccdd405..624563b 100644 (file)
@@ -83,7 +83,6 @@
 
 #include <sys/sysref2.h>
 #include <sys/spinlock2.h>
-#include <sys/mplock2.h>
 
 #define MAX_RECURSION_DEPTH    64