patch for schedulers
Julian Elischer
julian at elischer.org
Tue Sep 14 01:20:19 PDT 2004
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
-------------- next part --------------
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;
More information about the freebsd-current
mailing list