May I add pthread_[gs]etconcurrency to the threads libraries?

Julian Elischer julian at elischer.org
Wed Apr 16 14:07:15 PDT 2003



On Wed, 16 Apr 2003, Jeff Roberson wrote:
> 
> I'm starting to warm up to the idea of moving kse out of the rest of the
> system.  It could be confined to kern_mn.c or whatever it is eventually
> called.

Jeff I'd like to start some small diffs that resemble the one
included.. 
This one changes shched_clock to use a thread.
I'd also like to commit a change to make KEF_IDLEKSE
to TDF_IDLETHREAD as you suggested.

Here I'm running with a file sys/ksevar.h that has 
teh kse structure in it.
eventually it would be in teh scheduler .c file
so I am not going to commit that change yet..

comments?

Julian


-------------- next part --------------
Index: sys/sched.h
===================================================================
RCS file: /repos/projects/mirrored/freebsd/src/sys/sys/sched.h,v
retrieving revision 1.4
diff -u -r1.4 sched.h
--- sys/sched.h	2003/04/11 03:39:06	1.4
+++ sys/sched.h	2003/04/16 20:59:52
@@ -68,7 +68,7 @@
  */
 void	sched_add(struct kse *ke);
 struct kse *sched_choose(void);
-void	sched_clock(struct kse *ke);
+void	sched_clock(struct thread *td);
 void	sched_exit_kse(struct kse *ke, struct kse *child);
 void	sched_fork_kse(struct kse *ke, struct kse *child);
 void	sched_rem(struct kse *ke);
Index: kern/kern_clock.c
===================================================================
RCS file: /repos/projects/mirrored/freebsd/src/sys/kern/kern_clock.c,v
retrieving revision 1.156
diff -u -r1.156 kern_clock.c
--- kern/kern_clock.c	2003/04/11 03:39:07	1.156
+++ kern/kern_clock.c	2003/04/16 20:59:52
@@ -357,7 +357,6 @@
 	struct rusage *ru;
 	struct vmspace *vm;
 	struct thread *td;
-	struct kse *ke;
 	struct proc *p;
 	long rss;
 
@@ -365,7 +364,6 @@
 	p = td->td_proc;
 
 	mtx_lock_spin_flags(&sched_lock, MTX_QUIET);
-	ke = td->td_kse;
 	if (CLKF_USERMODE(frame)) {
 		/*
 		 * Charge the time as appropriate.
@@ -373,7 +371,7 @@
 		if (p->p_flag & P_THREADED)
 			thread_statclock(1);
 		p->p_uticks++;
-		if (ke->ke_ksegrp->kg_nice > NZERO)
+		if (td->td_ksegrp->kg_nice > NZERO)
 			cp_time[CP_NICE]++;
 		else
 			cp_time[CP_USER]++;
@@ -405,7 +403,7 @@
 		}
 	}
 
-	sched_clock(ke);
+	sched_clock(td);
 
 	/* Update resource usage integrals and maximums. */
 	if ((pstats = p->p_stats) != NULL &&
Index: kern/sched_4bsd.c
===================================================================
RCS file: /repos/projects/mirrored/freebsd/src/sys/kern/sched_4bsd.c,v
retrieving revision 1.15
diff -u -r1.15 sched_4bsd.c
--- kern/sched_4bsd.c	2003/04/11 03:39:48	1.15
+++ kern/sched_4bsd.c	2003/04/16 20:59:52
@@ -438,13 +438,13 @@
  * run much recently, and to round-robin among other processes.
  */
 void
-sched_clock(struct kse *ke)
+sched_clock(struct thread *td)
 {
 	struct ksegrp *kg;
-	struct thread *td;
+	struct kse *ke;
 
-	kg = ke->ke_ksegrp;
-	td = ke->ke_thread;
+	kg = td->td_ksegrp;
+	ke = td->td_kse;
 
 	ke->ke_sched->ske_cpticks++;
 	kg->kg_estcpu = ESTCPULIM(kg->kg_estcpu + 1);
Index: kern/sched_ule.c
===================================================================
RCS file: /repos/projects/mirrored/freebsd/src/sys/kern/sched_ule.c,v
retrieving revision 1.28
diff -u -r1.28 sched_ule.c
--- kern/sched_ule.c	2003/04/12 22:33:24	1.28
+++ kern/sched_ule.c	2003/04/16 20:59:52
@@ -855,11 +855,11 @@
 }
 
 void
-sched_clock(struct kse *ke)
+sched_clock(struct thread *td)
 {
 	struct kseq *kseq;
 	struct ksegrp *kg;
-	struct thread *td;
+	struct kse *ke
 #if 0
 	struct kse *nke;
 #endif
@@ -880,8 +880,8 @@
 			tickincr = 1;
 	}
 
-	td = ke->ke_thread;
-	kg = ke->ke_ksegrp;
+	ke = td->td_kse;
+	kg = td->td_ksegrp;
 
 	mtx_assert(&sched_lock, MA_OWNED);
 	KASSERT((td != NULL), ("schedclock: null thread pointer"));


More information about the freebsd-threads mailing list