From owner-p4-projects@FreeBSD.ORG Mon Aug 14 21:02:32 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 46DE916A4E1; Mon, 14 Aug 2006 21:02:32 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 12ACA16A4DE for ; Mon, 14 Aug 2006 21:02:32 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id C13EF43D4C for ; Mon, 14 Aug 2006 21:02:31 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k7EL2VM4036096 for ; Mon, 14 Aug 2006 21:02:31 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k7EL2VDU036093 for perforce@freebsd.org; Mon, 14 Aug 2006 21:02:31 GMT (envelope-from jhb@freebsd.org) Date: Mon, 14 Aug 2006 21:02:31 GMT Message-Id: <200608142102.k7EL2VDU036093@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 103908 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: Mon, 14 Aug 2006 21:02:32 -0000 http://perforce.freebsd.org/chv.cgi?CH=103908 Change 103908 by jhb@jhb_mutex on 2006/08/14 21:01:30 Less sucky. Affected files ... .. //depot/projects/smpng/sys/modules/crash2/crash2.c#14 edit Differences ... ==== //depot/projects/smpng/sys/modules/crash2/crash2.c#14 (text+ko) ==== @@ -91,6 +91,7 @@ static struct mtx abc, def, ghi, jkl; static struct sx one, two, three, four; static struct lock fee, fi, fo, fum; +static int crash2_wait = 1; static int mod_event(struct module *module, int cmd, void *arg); static int load(void *arg); @@ -105,10 +106,21 @@ static void mtx_deadlock(int thread) { + static int barrier; + atomic_add_int(&barrier, 1); + while (barrier != NTHREADS) + cpu_spinwait(); mtx_lock(mtxen[thread % 4]); DELAY(500); + + atomic_add_int(&barrier, 1); + while (barrier != 2 * NTHREADS) + cpu_spinwait(); mtx_lock(mtxen[(thread + 1) % 4]); + + while (crash2_wait) + cpu_spinwait(); } CRASH2_EVENT("mutex cycle", mtx_deadlock, mtx_deadlock, mtx_deadlock, mtx_deadlock);