Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Sep 2004 01:24:33 -0700
From:      Julian Elischer <julian@elischer.org>
To:        Andrew Gallatin <gallatin@cs.duke.edu>
Cc:        freebsd-threads@freebsd.org
Subject:   Re: Unkillable KSE threaded proc
Message-ID:  <4146AAC1.5020701@elischer.org>
In-Reply-To: <16704.49447.290897.602540@grasshopper.cs.duke.edu>
References:  <16703.11479.679335.588170@grasshopper.cs.duke.edu> <16703.12410.319869.29996@grasshopper.cs.duke.edu> <413F55B8.50003@elischer.org> <16703.28031.454342.774229@grasshopper.cs.duke.edu> <413F8DBB.5040502@elischer.org> <16704.40876.708925.425911@grasshopper.cs.duke.edu> <4140AA2A.90605@elischer.org> <16704.45327.42494.922427@grasshopper.cs.duke.edu> <4140C04D.1060906@elischer.org> <16704.49447.290897.602540@grasshopper.cs.duke.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------080701070602030008080208
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Andrew Gallatin wrote:
> Julian Elischer writes:
>  > >
>  > >Maybe this would be easier to debug if I disabled preemption?
>  > >
>  > 
>  > 
>  > I think that this would possibly GO AWAY of you disab;ed preemption. 
>  > which would make it very hard to debug :-)
>  > 
> 
> Yes and no.  You initially asked me to try in -current because of
> some changes you'd made to the exit code.  RELENG_5 (with the old
> exit code and no preemption) shows a different problem (proc is
> just not killable).    If the proc was killable without preemption,
> that would at least show your new code is better..

try the attached diff:

> 
> Drew


--------------080701070602030008080208
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;
 

--------------080701070602030008080208--



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