From owner-p4-projects@FreeBSD.ORG Sun Jan 14 18:55:42 2007 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 6C67216A4A7; Sun, 14 Jan 2007 18:55:42 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2995916A492 for ; Sun, 14 Jan 2007 18:55:42 +0000 (UTC) (envelope-from zec@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 1A7BE13C43E for ; Sun, 14 Jan 2007 18:55:42 +0000 (UTC) (envelope-from zec@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 l0EItf3a055793 for ; Sun, 14 Jan 2007 18:55:41 GMT (envelope-from zec@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id l0EIteT0055776 for perforce@freebsd.org; Sun, 14 Jan 2007 18:55:40 GMT (envelope-from zec@FreeBSD.org) Date: Sun, 14 Jan 2007 18:55:40 GMT Message-Id: <200701141855.l0EIteT0055776@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@FreeBSD.org using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 112910 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: Sun, 14 Jan 2007 18:55:42 -0000 http://perforce.freebsd.org/chv.cgi?CH=112910 Change 112910 by zec@zec_tca51 on 2007/01/14 18:54:54 In callout_reset() check whether the handle provided by the caller is already linked in somewhere in the callout wheel. If it is, panic. This check can be insanely expensive and shouldn't be compiled in under normal circumstances, but at the moment I need this for chasing ghosts... Affected files ... .. //depot/projects/vimage/src/sys/kern/kern_timeout.c#2 edit Differences ... ==== //depot/projects/vimage/src/sys/kern/kern_timeout.c#2 (text+ko) ==== @@ -37,6 +37,8 @@ #include __FBSDID("$FreeBSD: src/sys/kern/kern_timeout.c,v 1.102 2006/10/11 14:57:03 glebius Exp $"); +#include "opt_vimage.h" + #include #include #include @@ -465,6 +467,23 @@ c->c_flags |= (CALLOUT_ACTIVE | CALLOUT_PENDING); c->c_func = ftn; c->c_time = ticks + to_ticks; +#if (defined(VIMAGE) && defined(INVARIANTS)) + /* + * MARKO XXX + * + * I'm suspecting that some lockups might have been caused by + * a single callout handle being scheduled multiple times. + * This loop examines the entire callwhell before inserting a + * new handle, and if the handle is already linked in it panics. + */ + int callwheel_iter; + struct callout *c_iter; + for (callwheel_iter = 0; callwheel_iter <= callwheelmask; + callwheel_iter++) + TAILQ_FOREACH(c_iter, &callwheel[callwheel_iter], c_links.tqe) + if (c_iter == c) + panic("finally got you!"); +#endif TAILQ_INSERT_TAIL(&callwheel[c->c_time & callwheelmask], c, c_links.tqe); CTR5(KTR_CALLOUT, "%sscheduled %p func %p arg %p in %d",