From owner-svn-src-stable-9@FreeBSD.ORG Mon Jan 2 00:01:10 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 59894106566C; Mon, 2 Jan 2012 00:01:10 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 296FC8FC12; Mon, 2 Jan 2012 00:01:10 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q0201A2K038775; Mon, 2 Jan 2012 00:01:10 GMT (envelope-from kib@svn.freebsd.org) Received: (from kib@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q0201AlG038771; Mon, 2 Jan 2012 00:01:10 GMT (envelope-from kib@svn.freebsd.org) Message-Id: <201201020001.q0201AlG038771@svn.freebsd.org> From: Konstantin Belousov Date: Mon, 2 Jan 2012 00:01:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r229254 - stable/9/sys/ddb X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jan 2012 00:01:10 -0000 Author: kib Date: Mon Jan 2 00:01:09 2012 New Revision: 229254 URL: http://svn.freebsd.org/changeset/base/229254 Log: MFC r228569: Add 'findstack' ddb command to search either the thread kernel stack or cached stack containing the specified kernel virtual address. Modified: stable/9/sys/ddb/db_command.c stable/9/sys/ddb/db_ps.c stable/9/sys/ddb/ddb.h Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/ddb/db_command.c ============================================================================== --- stable/9/sys/ddb/db_command.c Sun Jan 1 23:58:42 2012 (r229253) +++ stable/9/sys/ddb/db_command.c Mon Jan 2 00:01:09 2012 (r229254) @@ -140,6 +140,7 @@ static struct command db_cmds[] = { { "unscript", db_unscript_cmd, CS_OWN, 0 }, { "capture", db_capture_cmd, CS_OWN, 0 }, { "textdump", db_textdump_cmd, CS_OWN, 0 }, + { "findstack", db_findstack_cmd, 0, 0 }, }; struct command_table db_cmd_table = LIST_HEAD_INITIALIZER(db_cmd_table); Modified: stable/9/sys/ddb/db_ps.c ============================================================================== --- stable/9/sys/ddb/db_ps.c Sun Jan 1 23:58:42 2012 (r229253) +++ stable/9/sys/ddb/db_ps.c Mon Jan 2 00:01:09 2012 (r229254) @@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -429,3 +430,39 @@ DB_SHOW_COMMAND(proc, db_show_proc) break; } } + +void +db_findstack_cmd(db_expr_t addr, boolean_t have_addr, + db_expr_t dummy3 __unused, char *dummy4 __unused) +{ + struct proc *p; + struct thread *td; + struct kstack_cache_entry *ks_ce; + vm_offset_t saddr; + + if (have_addr) + saddr = addr; + else { + db_printf("Usage: findstack
\n"); + return; + } + + for (p = LIST_FIRST(&allproc); p != NULL; p = LIST_NEXT(p, p_list)) { + FOREACH_THREAD_IN_PROC(p, td) { + if (td->td_kstack <= saddr && saddr < td->td_kstack + + PAGE_SIZE * td->td_kstack_pages) { + db_printf("Thread %p\n", td); + return; + } + } + } + + for (ks_ce = kstack_cache; ks_ce != NULL; + ks_ce = ks_ce->next_ks_entry) { + if ((vm_offset_t)ks_ce <= saddr && saddr < (vm_offset_t)ks_ce + + PAGE_SIZE * KSTACK_PAGES) { + db_printf("Cached stack %p\n", ks_ce); + return; + } + } +} Modified: stable/9/sys/ddb/ddb.h ============================================================================== --- stable/9/sys/ddb/ddb.h Sun Jan 1 23:58:42 2012 (r229253) +++ stable/9/sys/ddb/ddb.h Mon Jan 2 00:01:09 2012 (r229254) @@ -226,6 +226,7 @@ db_cmdfcn_t db_delete_cmd; db_cmdfcn_t db_deletehwatch_cmd; db_cmdfcn_t db_deletewatch_cmd; db_cmdfcn_t db_examine_cmd; +db_cmdfcn_t db_findstack_cmd; db_cmdfcn_t db_hwatchpoint_cmd; db_cmdfcn_t db_listbreak_cmd; db_cmdfcn_t db_scripts_cmd;