From owner-freebsd-current@FreeBSD.ORG Tue Sep 14 08:20:19 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 7A84E16A4CE for ; Tue, 14 Sep 2004 08:20:19 +0000 (GMT) Received: from pimout3-ext.prodigy.net (pimout3-ext.prodigy.net [207.115.63.102]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1EB4B43D3F for ; Tue, 14 Sep 2004 08:20:19 +0000 (GMT) (envelope-from julian@elischer.org) Received: from elischer.org (adsl-67-126-115-227.dsl.snfc21.pacbell.net [67.126.115.227])i8E8KHPJ267864 for ; Tue, 14 Sep 2004 04:20:18 -0400 Message-ID: <4146A9C0.40306@elischer.org> Date: Tue, 14 Sep 2004 01:20:16 -0700 From: Julian Elischer User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.4b) Gecko/20030524 X-Accept-Language: en, hu MIME-Version: 1.0 To: current@freebsd.org Content-Type: multipart/mixed; boundary="------------000007010909060304040104" Subject: patch for schedulers X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Sep 2004 08:20:19 -0000 This is a multi-part message in MIME format. --------------000007010909060304040104 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit SOme people have reported threaded apps hanging and becoming unkillable. If you have this problem in a reproducible way, please try the attached patch and let me know if it helps. Julian --------------000007010909060304040104 Content-Type: text/plain; name="q.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="q.diff" Index: sys/kern/kern_switch.c =========================================================================== --- sys/kern/kern_switch.c 2004/09/14 08:14:48 #76 +++ sys/kern/kern_switch.c 2004/09/14 08:14:48 @@ -350,11 +389,10 @@ } kg->kg_avail_opennings = 1; } - kg->kg_avail_opennings--; sched_add(td, flags); return; } tda = kg->kg_last_assigned; if ((kg->kg_avail_opennings <= 0) && (tda && (tda->td_priority > td->td_priority))) { @@ -415,7 +449,6 @@ td2 = TAILQ_NEXT(tda, td_runq); kg->kg_last_assigned = td2; } - kg->kg_avail_opennings--; sched_add(td2, flags); } else { CTR3(KTR_RUNQ, "setrunqueue: held: td%p kg%p pid%d", Index: sys/kern/sched_4bsd.c =========================================================================== --- sys/kern/sched_4bsd.c 2004/09/14 08:14:48 #64 +++ sys/kern/sched_4bsd.c 2004/09/14 08:14:48 @@ -1024,6 +1024,7 @@ } if ((td->td_proc->p_flag & P_NOLOAD) == 0) sched_tdcnt++; + td->td_ksegrp->kg_avail_opennings--; runq_add(ke->ke_runq, ke); ke->ke_ksegrp->kg_runq_kses++; ke->ke_state = KES_ONRUNQ; Index: sys/kern/sched_ule.c =========================================================================== --- sys/kern/sched_ule.c 2004/09/14 08:14:48 #127 +++ sys/kern/sched_ule.c 2004/09/14 08:14:48 @@ -1773,6 +1773,7 @@ curthread->td_flags |= TDF_NEEDRESCHED; if (preemptive && maybe_preempt(td)) return; + td->td_ksegrp->kg_avail_opennings--; ke->ke_ksegrp->kg_runq_threads++; ke->ke_state = KES_ONRUNQ; --------------000007010909060304040104--