Date: Thu, 14 Feb 2008 20:53:53 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 135405 for review Message-ID: <200802142053.m1EKrrdI032730@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=135405 Change 135405 by jhb@jhb_mutex on 2008/02/14 20:53:35 - Add 'show callouts' - add test case for pause issue. Affected files ... .. //depot/projects/smpng/sys/kern/kern_timeout.c#35 edit .. //depot/projects/smpng/sys/modules/crash/crash.c#50 edit Differences ... ==== //depot/projects/smpng/sys/kern/kern_timeout.c#35 (text+ko) ==== @@ -37,6 +37,8 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD: src/sys/kern/kern_timeout.c,v 1.108 2007/11/22 12:15:54 attilio Exp $"); +#include "opt_ddb.h" + #include <sys/param.h> #include <sys/systm.h> #include <sys/callout.h> @@ -48,6 +50,10 @@ #include <sys/proc.h> #include <sys/sleepqueue.h> #include <sys/sysctl.h> +#ifdef DDB +#include <ddb/ddb.h> +#include <ddb/db_sym.h> +#endif static int avg_depth; SYSCTL_INT(_debug, OID_AUTO, to_avg_depth, CTLFLAG_RD, &avg_depth, 0, @@ -712,3 +718,71 @@ return; } #endif /* APM_FIXUP_CALLTODO */ + +#ifdef DDB +#if 0 +static void +db_print_ticks(int ticks) +{ + int h, m, s; + + s = ticks / hz; + m = s / 60; + h = m / 60; + + if (h > 0) + printf("%02d:", h); + else + printf(" "); + if (m > 0) + printf("%02d:", m % 60); + else + printf(" "); + if (s > 0) + printf("%02d.%-4d", s % 60, ticks % hz); + else + printf(" %4d", ticks); +} +#endif + +DB_SHOW_COMMAND(callouts, db_show_callouts) +{ + struct callout *c; + int bucket, callouts, sticks; + + /* First, count the number of callouts. */ + callouts = 0; + for (bucket = 0; bucket < callwheelsize; bucket++) { + TAILQ_FOREACH(c, &callwheel[bucket], c_links.tqe) { + callouts++; + } + } + + sticks = softticks; + do { + bucket = sticks & callwheelmask; + TAILQ_FOREACH(c, &callwheel[bucket], c_links.tqe) { + if (c->c_time < sticks) + continue; + if (c->c_time > sticks) + break; +#if 1 + db_printf("%9d ", c->c_time - softticks); +#else + db_print_ticks(c->c_time - softticks); + db_printf(" "); +#endif + db_printsym((db_expr_t)c->c_func, DB_STGY_PROC); + db_printf("(%p)", c->c_arg); + if (c->c_lock) + db_printf(" lock %p (%s)", c->c_lock, + c->c_lock->lo_name); + db_printf("\n"); + callouts--; + if (db_pager_quit) + return; + } + sticks++; + } while (callouts > 0); +} +#endif /* DDB */ ==== //depot/projects/smpng/sys/modules/crash/crash.c#50 (text+ko) ==== @@ -89,6 +89,15 @@ /* Events. */ +static void +pause_forever(void *dummy) +{ + + for (;;) + pause("foo", 1); +} +CRASH_EVENT("pause in an endless loop", pause_forever); + static int race_wchan; static void
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200802142053.m1EKrrdI032730>