Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Apr 2004 22:48:34 -0800 (PST)
From:      Julian Elischer <julian@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 50315 for review
Message-ID:  <200404040648.i346mYjj011247@repoman.freebsd.org>

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

Change 50315 by julian@julian_jules1 on 2004/04/03 22:48:02

	rethink when teh sched specific regions get cleared.
	probably needs more thought.

Affected files ...

.. //depot/projects/nsched/sys/kern/init_main.c#4 edit
.. //depot/projects/nsched/sys/kern/kern_thread.c#4 edit

Differences ...

==== //depot/projects/nsched/sys/kern/init_main.c#4 (text+ko) ====


==== //depot/projects/nsched/sys/kern/kern_thread.c#4 (text+ko) ====

@@ -169,6 +169,7 @@
 	td->td_state = TDS_INACTIVE;
 	td->td_oncpu	= NOCPU;
 	td->td_critnest = 1;
+	sched_newthread(td);
 }
 
 /*
@@ -235,6 +236,7 @@
 	td->td_sleepqueue = sleepq_alloc();
 	td->td_turnstile = turnstile_alloc();
 	td->td_sched = (struct td_sched *)&td[1];
+
 }
 
 /*
@@ -252,6 +254,18 @@
 }
 
 /*
+ * Prepare a ksegrp for use.
+ */
+static void
+thread_ctor(void *mem, int size, void *arg)
+{
+	struct ksegrp	*kg;
+
+	ke = (struct ksegrp *)mem;
+	sched_newkseg(kg);
+}
+
+/*
  * Initialize type-stable parts of a ksegrp (when newly created).
  */
 static void
@@ -279,7 +293,6 @@
 	kg->kg_numthreads = 0;
 	kg->kg_runnable   = 0;
 	kg->kg_numupcalls = 0;
-	sched_newkseg(kg);
 	/* link it in now that it's consistent */
 	p->p_numksegrps++;
 	TAILQ_INSERT_HEAD(&p->p_ksegrps, kg, kg_ksegrp);
@@ -369,6 +382,8 @@
 
 	ksegrp_link(kg, p);
 	thread_link(td, kg);
+	sched_newthread(td);
+	sched_newkseg(kg);
 }
 
 #ifndef _SYS_SYSPROTO_H_
@@ -601,7 +616,7 @@
 	p = td->td_proc;
 	td2 = NULL;
 	ku = NULL;
-	/* KSE-enabled processes only, please. */
+	/* kSE-enabled processes only, please. */
 	if (!(p->p_flag & P_SA))
 		return (EINVAL);
 	PROC_LOCK(p);
@@ -827,7 +842,7 @@
 	tid_zone = uma_zcreate("TID", sizeof(struct tid_bitmap_part),
 	    NULL, NULL, NULL, NULL, UMA_ALIGN_CACHE, 0);
 	ksegrp_zone = uma_zcreate("KSEGRP", sched_sizeof_ksegrp(),
-	    NULL, NULL, ksegrp_init, NULL,
+	    ksegrp_ctor, NULL, ksegrp_init, NULL,
 	    UMA_ALIGN_CACHE, 0);
 	upcall_zone = uma_zcreate("UPCALL", sizeof(struct kse_upcall),
 	    NULL, NULL, NULL, NULL, UMA_ALIGN_CACHE, 0);
@@ -1320,7 +1335,6 @@
 	td->td_proc     = p;
 	td->td_ksegrp   = kg;
 	td->td_flags    = 0;
-	sched_newthread(td);
 
 	LIST_INIT(&td->td_contested);
 	callout_init(&td->td_slpcallout, CALLOUT_MPSAFE);
@@ -1442,6 +1456,7 @@
 	bcopy(&td->td_startcopy, &td2->td_startcopy,
 	    (unsigned) RANGEOF(struct thread, td_startcopy, td_endcopy));
 	thread_link(td2, ku->ku_ksegrp);
+	sched_newthread(td2);
 	/* inherit blocked thread's context */
 	cpu_set_upcall(td2, td);
 	/* Let the new thread become owner of the upcall */



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