Date: Sun, 23 Jun 2002 16:28:04 -0700 (PDT) From: Matt Dillon <dillon@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 13343 for review Message-ID: <200206232328.g5NNS4D50800@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=13343 Change 13343 by dillon@apollo on 2002/06/23 16:27:40 NULL-out ke_thread where appropriate when a KSE is going into the IDLE queue. Fix an inverted assertion in remrunqueue(). Fix a restart label in wakeup() that was breaking Julian's sys/queue.h debugging code. Change Julian's OIKS Debugger() entry: Add a sysctl to allow us to control whether it just printf()'s, or whether it drops into the debugger. Cross fingers and hope I've done this correctly. Affected files ... ... //depot/projects/kse/sys/kern/kern_switch.c#58 edit ... //depot/projects/kse/sys/kern/kern_synch.c#71 edit ... //depot/projects/kse/sys/kern/kern_thread.c#78 edit Differences ... ==== //depot/projects/kse/sys/kern/kern_switch.c#58 (text+ko) ==== @@ -201,6 +201,7 @@ KASSERT((ke->ke_state != KES_IDLE), ("kse already idle")); KASSERT((ke->ke_kgrlist.tqe_next != ke), ("linked to self!")); ke->ke_state = KES_IDLE; + ke->ke_thread = NULL; TAILQ_INSERT_HEAD(&kg->kg_iq, ke, ke_kgrlist); kg->kg_idle_kses++; CTR1(KTR_RUNQ, "kse_reassign: ke%p idled", ke); @@ -259,7 +260,7 @@ struct kse *ke; mtx_assert(&sched_lock, MA_OWNED); - KASSERT ((td->td_state != TDS_RUNQ), + KASSERT ((td->td_state == TDS_RUNQ), ("remrunqueue: Bad state on run queue")); kg = td->td_ksegrp; ke = td->td_kse; @@ -312,6 +313,7 @@ KASSERT((ke->ke_state != KES_IDLE), ("kse already idle")); ke->ke_state = KES_IDLE; + ke->ke_thread = NULL; KASSERT((TAILQ_FIRST(&kg->kg_iq) != ke), ("really bad screwup")); TAILQ_INSERT_HEAD(&kg->kg_iq, ke, ke_kgrlist); kg->kg_idle_kses++; ==== //depot/projects/kse/sys/kern/kern_synch.c#71 (text+ko) ==== @@ -421,7 +421,6 @@ * flag the mutex is not entered before returning. */ - int msleep(ident, mtx, priority, wmesg, timo) void *ident; @@ -719,8 +718,8 @@ wakeup((caddr_t)&proc0); } /* END INLINE EXPANSION */ - goto restart; } + goto restart; } } mtx_unlock_spin(&sched_lock); ==== //depot/projects/kse/sys/kern/kern_thread.c#78 (text+ko) ==== @@ -70,6 +70,10 @@ SYSCTL_INT(_kern_threads, OID_AUTO, allocated, CTLFLAG_RD, &allocated_threads, 0, "Number of threads in zone."); +static int oiks_debug = 1; /* 0 disable, 1 printf, 2 enter debugger */ +SYSCTL_INT(_kern_threads, OID_AUTO, oiks, CTLFLAG_RW, + &oiks_debug, 0, "OIKS thread debug"); + #define RANGEOF(type, start, end) (offsetof(type, end) - offsetof(type, start)) tdlist_head_t zombie_threads = TAILQ_HEAD_INITIALIZER(zombie_threads); @@ -375,7 +379,11 @@ TAILQ_INSERT_HEAD(&kg->kg_threads, td, td_kglist); p->p_numthreads++; kg->kg_numthreads++; -if (p->p_numthreads > 4) Debugger("OIKS"); + if (oiks_debug && p->p_numthreads > 4) { + printf("OIKS %d\n", p->p_numthreads); + if (oiks_debug > 1) + Debugger("OIKS"); + } td->td_critnest = 0; td->td_kse = NULL; } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200206232328.g5NNS4D50800>