Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Aug 2006 04:18:13 GMT
From:      John Birrell <jb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 103223 for review
Message-ID:  <200608050418.k754IDOk000711@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=103223

Change 103223 by jb@jb_freebsd2 on 2006/08/05 04:18:03

	Merge the MPSAFE changes from current.
	
	Merge KSE support back in under the kernel option KSE.

Affected files ...

.. //depot/projects/dtrace/src/sys/kern/kern_proc.c#3 edit

Differences ...

==== //depot/projects/dtrace/src/sys/kern/kern_proc.c#3 (text+ko) ====

@@ -142,6 +142,9 @@
 {
 	struct proc *p;
 	struct thread *td;
+#if defined(INVARIANTS) && defined(KSE)
+	struct ksegrp *kg;
+#endif
 
 	/* INVARIANTS checks go here */
 	p = (struct proc *)mem;
@@ -149,7 +152,14 @@
 #ifdef INVARIANTS
 	KASSERT((p->p_numthreads == 1),
 	    ("bad number of threads in exiting process"));
+#ifdef KSE
+	KASSERT((p->p_numksegrps == 1), ("free proc with > 1 ksegrp"));
+#endif
 	KASSERT((td != NULL), ("proc_dtor: bad thread pointer"));
+#ifdef KSE
+        kg = FIRST_KSEGRP_IN_PROC(p);
+	KASSERT((kg != NULL), ("proc_dtor: bad kg pointer"));
+#endif
 	KASSERT(STAILQ_EMPTY(&p->p_ktr), ("proc_dtor: non-empty p_ktr"));
 #endif
 
@@ -172,14 +182,25 @@
 {
 	struct proc *p;
 	struct thread *td;
+#ifdef KSE
+	struct ksegrp *kg;
+#endif
 
 	p = (struct proc *)mem;
 	p->p_sched = (struct p_sched *)&p[1];
 	td = thread_alloc();
+#ifdef KSE
+	kg = ksegrp_alloc();
+#endif
 	bzero(&p->p_mtx, sizeof(struct mtx));
 	mtx_init(&p->p_mtx, "process lock", NULL, MTX_DEF | MTX_DUPOK);
 	p->p_stats = pstats_alloc();
+#ifdef KSE
+	proc_linkup(p, kg, td);
+	sched_newproc(p, kg, td);
+#else
 	proc_linkup(p, td);
+#endif
 	return (0);
 }
 
@@ -195,6 +216,9 @@
 
 	p = (struct proc *)mem;
 	pstats_free(p->p_stats);
+#ifdef KSE
+	ksegrp_free(FIRST_KSEGRP_IN_PROC(p));
+#endif
 	thread_free(FIRST_THREAD_IN_PROC(p));
 	mtx_destroy(&p->p_mtx);
 	if (p->p_ksi != NULL)
@@ -750,6 +774,9 @@
 static void
 fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp)
 {
+#ifdef KSE
+	struct ksegrp *kg;
+#endif
 	struct proc *p;
 
 	p = td->td_proc;
@@ -789,6 +816,15 @@
 		kp->ki_stat = SIDL;
 	}
 
+#ifdef KSE
+	kg = td->td_ksegrp;
+
+	/* things in the KSE GROUP */
+	kp->ki_estcpu = kg->kg_estcpu;
+	kp->ki_slptime = kg->kg_slptime;
+	kp->ki_pri.pri_user = kg->kg_user_pri;
+	kp->ki_pri.pri_class = kg->kg_pri_class;
+#endif
 	/* Things in the thread */
 	kp->ki_wchan = td->td_wchan;
 	kp->ki_pri.pri_level = td->td_priority;
@@ -801,10 +837,12 @@
 	kp->ki_pcb = td->td_pcb;
 	kp->ki_kstack = (void *)td->td_kstack;
 	kp->ki_pctcpu = sched_pctcpu(td);
+#ifndef KSE
 	kp->ki_estcpu = td->td_estcpu;
 	kp->ki_slptime = td->td_slptime;
 	kp->ki_pri.pri_class = td->td_pri_class;
 	kp->ki_pri.pri_user = td->td_user_pri;
+#endif
 
 	/* We can't get this anymore but ps etc never used it anyway. */
 	kp->ki_rqindex = 0;
@@ -1268,44 +1306,38 @@
 
 static SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD,  0, "Process table");
 
-SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all,
-	CTLFLAG_RD|CTLTYPE_STRUCT|CTLFLAG_MPSAFE,
+SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT,
 	0, 0, sysctl_kern_proc, "S,proc", "Return entire process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_GID, gid, CTLFLAG_RD|CTLFLAG_MPSAFE,
+static SYSCTL_NODE(_kern_proc, KERN_PROC_GID, gid, CTLFLAG_RD,
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, 
+static SYSCTL_NODE(_kern_proc, KERN_PROC_PGRP, pgrp, CTLFLAG_RD, 
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_RGID, rgid,
-	CTLFLAG_RD|CTLFLAG_MPSAFE,
+static SYSCTL_NODE(_kern_proc, KERN_PROC_RGID, rgid, CTLFLAG_RD,
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_SESSION, sid,
-	CTLFLAG_RD|CTLFLAG_MPSAFE,
+static SYSCTL_NODE(_kern_proc, KERN_PROC_SESSION, sid, CTLFLAG_RD,
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty, CTLFLAG_RD|CTLFLAG_MPSAFE, 
+static SYSCTL_NODE(_kern_proc, KERN_PROC_TTY, tty, CTLFLAG_RD, 
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_UID, uid, CTLFLAG_RD|CTLFLAG_MPSAFE, 
+static SYSCTL_NODE(_kern_proc, KERN_PROC_UID, uid, CTLFLAG_RD, 
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_RUID, ruid,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, 
+static SYSCTL_NODE(_kern_proc, KERN_PROC_RUID, ruid, CTLFLAG_RD, 
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_PID, pid, CTLFLAG_RD|CTLFLAG_MPSAFE, 
+static SYSCTL_NODE(_kern_proc, KERN_PROC_PID, pid, CTLFLAG_RD, 
 	sysctl_kern_proc, "Process table");
 
-static SYSCTL_NODE(_kern_proc, KERN_PROC_PROC, proc,
-	CTLFLAG_RD|CTLFLAG_MPSAFE,
+static SYSCTL_NODE(_kern_proc, KERN_PROC_PROC, proc, CTLFLAG_RD,
 	sysctl_kern_proc, "Return process table, no threads");
 
 static SYSCTL_NODE(_kern_proc, KERN_PROC_ARGS, args,
-	CTLFLAG_RW | CTLFLAG_ANYBODY | CTLFLAG_MPSAFE,
+	CTLFLAG_RW | CTLFLAG_ANYBODY,
 	sysctl_kern_proc_args, "Process argument list");
 
 static SYSCTL_NODE(_kern_proc, KERN_PROC_PATHNAME, pathname, CTLFLAG_RD,
@@ -1315,29 +1347,28 @@
 	sysctl_kern_proc_sv_name, "Process syscall vector name (ABI type)");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_GID | KERN_PROC_INC_THREAD), gid_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_PGRP | KERN_PROC_INC_THREAD), pgrp_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_RGID | KERN_PROC_INC_THREAD), rgid_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_SESSION | KERN_PROC_INC_THREAD),
-	sid_td, CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	sid_td, CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_TTY | KERN_PROC_INC_THREAD), tty_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_UID | KERN_PROC_INC_THREAD), uid_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_RUID | KERN_PROC_INC_THREAD), ruid_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_PID | KERN_PROC_INC_THREAD), pid_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc, "Process table");
+	CTLFLAG_RD, sysctl_kern_proc, "Process table");
 
 static SYSCTL_NODE(_kern_proc, (KERN_PROC_PROC | KERN_PROC_INC_THREAD), proc_td,
-	CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_kern_proc,
-	"Return process table, no threads");
+	CTLFLAG_RD, sysctl_kern_proc, "Return process table, no threads");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200608050418.k754IDOk000711>