From owner-p4-projects@FreeBSD.ORG Wed Sep 15 05:15:45 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8124616A4D0; Wed, 15 Sep 2004 05:15:45 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 55A2A16A4CE for ; Wed, 15 Sep 2004 05:15:45 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3232A43D2F for ; Wed, 15 Sep 2004 05:15:45 +0000 (GMT) (envelope-from julian@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i8F5FjSf066087 for ; Wed, 15 Sep 2004 05:15:45 GMT (envelope-from julian@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i8F5FiGe066084 for perforce@freebsd.org; Wed, 15 Sep 2004 05:15:44 GMT (envelope-from julian@freebsd.org) Date: Wed, 15 Sep 2004 05:15:44 GMT Message-Id: <200409150515.i8F5FiGe066084@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to julian@freebsd.org using -f From: Julian Elischer To: Perforce Change Reviews Subject: PERFORCE change 61527 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Sep 2004 05:15:46 -0000 http://perforce.freebsd.org/chv.cgi?CH=61527 Change 61527 by julian@julian_ref on 2004/09/15 05:15:06 more careful counting of slots Affected files ... .. //depot/projects/nsched/sys/kern/kern_switch.c#30 edit .. //depot/projects/nsched/sys/kern/sched_4bsd.c#55 edit .. //depot/projects/nsched/sys/kern/sched_ule.c#34 edit Differences ... ==== //depot/projects/nsched/sys/kern/kern_switch.c#30 (text+ko) ==== @@ -266,7 +266,6 @@ */ if (td) { kg->kg_last_assigned = td; - kg->kg_avail_opennings--; sched_add(td, SRQ_BORING); CTR2(KTR_RUNQ, "slot_fill: td%p -> kg%p", td, kg); } else { @@ -301,7 +300,6 @@ if ((td->td_proc->p_flag & P_HADTHREADS) == 0) { /* remve from sys run queue and free up a slot */ sched_rem(td); - kg->kg_avail_opennings++; ke->ke_state = KES_THREAD; return; } @@ -316,7 +314,6 @@ * see if we need to move the KSE in the run queues. */ sched_rem(td); - kg->kg_avail_opennings++; ke->ke_state = KES_THREAD; td2 = kg->kg_last_assigned; KASSERT((td2 != NULL), ("last assigned has wrong value")); @@ -361,7 +358,6 @@ TAILQ_PREV(td, threadqueue, td_runq); } sched_rem(td); - kg->kg_avail_opennings++; } TAILQ_REMOVE(&kg->kg_runq, td, td_runq); kg->kg_runnable--; ==== //depot/projects/nsched/sys/kern/sched_4bsd.c#55 (text+ko) ==== @@ -792,6 +792,12 @@ /* * The thread we are about to run needs to be counted as if it had been * added to the run queue and selected. + * it came from: + * A preemption + * An upcall + * A followon + * Do this before saving curthread so that the slot count + * doesn't give an overly optimistic view when that happens. */ if (newtd) { KASSERT((newtd->td_inhibitors == 0), @@ -1045,12 +1051,17 @@ if ((td->td_proc->p_flag & P_NOLOAD) == 0) sched_tdcnt--; + td->td_ksegrp->kg_avail_opennings++; runq_remove(ke->ke_runq, ke); ke->ke_state = KES_THREAD; - ke->ke_ksegrp->kg_runq_kses--; + td->td_ksegrp->kg_runq_kses--; } +/* + * Select threads to run. + * Notice that the running threads still consume a slot. + */ struct kse * sched_choose(void) { ==== //depot/projects/nsched/sys/kern/sched_ule.c#34 (text+ko) ==== @@ -1801,6 +1801,7 @@ ("sched_rem: KSE not on run queue")); ke->ke_state = KES_THREAD; + td->td_ksegrp->kg_avail_opennings++; ke->ke_ksegrp->kg_runq_threads--; kseq = KSEQ_CPU(ke->ke_cpu); kseq_runq_rem(kseq, ke);