From owner-p4-projects@FreeBSD.ORG Wed Feb 13 23:02:14 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DCF6616A50F; Wed, 13 Feb 2008 23:02:13 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A18E316A4F4 for ; Wed, 13 Feb 2008 23:02:13 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 8E99913C461 for ; Wed, 13 Feb 2008 23:02:13 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m1DN2DOh055697 for ; Wed, 13 Feb 2008 23:02:13 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m1DN2D9d055694 for perforce@freebsd.org; Wed, 13 Feb 2008 23:02:13 GMT (envelope-from jhb@freebsd.org) Date: Wed, 13 Feb 2008 23:02:13 GMT Message-Id: <200802132302.m1DN2D9d055694@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 135352 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Feb 2008 23:02:14 -0000 http://perforce.freebsd.org/chv.cgi?CH=135352 Change 135352 by jhb@jhb_mutex on 2008/02/13 23:01:15 Add missing assertions and KTR logging to thread_lock(). This is why I wasn't getting assertion failures when thread_lock() recursed on a non-recursive spin mutex. Affected files ... .. //depot/projects/smpng/sys/kern/kern_mutex.c#151 edit Differences ... ==== //depot/projects/smpng/sys/kern/kern_mutex.c#151 (text+ko) ==== @@ -498,7 +498,6 @@ int i, contested; uint64_t waittime; - contested = i = 0; waittime = 0; tid = (uintptr_t)curthread; @@ -506,6 +505,15 @@ retry: spinlock_enter(); m = td->td_lock; + KASSERT(m->mtx_lock != MTX_DESTROYED, + ("thread_lock() of destroyed mutex @ %s:%d", file, line)); + KASSERT(LOCK_CLASS(&m->lock_object) == &lock_class_mtx_spin, + ("thread_lock() of sleep mutex %s @ %s:%d", + m->lock_object.lo_name, file, line)); + if (mtx_owned(m)) + KASSERT((m->lock_object.lo_flags & LO_RECURSABLE) != 0, + ("thread_lock: recursed on non-recursive mutex %s @ %s:%d\n", + m->lock_object.lo_name, file, line)); WITNESS_CHECKORDER(&m->lock_object, opts | LOP_NEWORDER | LOP_EXCLUSIVE, file, line); while (!_obtain_lock(m, tid)) { @@ -538,6 +546,8 @@ if (m->mtx_recurse == 0) lock_profile_obtain_lock_success(&m->lock_object, contested, waittime, (file), (line)); + LOCK_LOG_LOCK("LOCK", &m->lock_object, opts, m->mtx_recurse, file, + line); WITNESS_LOCK(&m->lock_object, opts | LOP_EXCLUSIVE, file, line); }