From owner-svn-src-projects@FreeBSD.ORG Tue Nov 26 00:23:48 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 8C499454; Tue, 26 Nov 2013 00:23:48 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 6CB0D24AB; Tue, 26 Nov 2013 00:23:48 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rAQ0Nm5h009494; Tue, 26 Nov 2013 00:23:48 GMT (envelope-from markj@svn.freebsd.org) Received: (from markj@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rAQ0NlZk009491; Tue, 26 Nov 2013 00:23:47 GMT (envelope-from markj@svn.freebsd.org) Message-Id: <201311260023.rAQ0NlZk009491@svn.freebsd.org> From: Mark Johnston Date: Tue, 26 Nov 2013 00:23:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r258611 - in projects/sv/sys: kern netinet X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Nov 2013 00:23:48 -0000 Author: markj Date: Tue Nov 26 00:23:47 2013 New Revision: 258611 URL: http://svnweb.freebsd.org/changeset/base/258611 Log: Change the "netdump" DDB command to call doadump() when netdump is enabled, rather than calling netdumpsys() directly. Otherwise the context of the invoking thread is not saved in dumppcb and kgdb is unable to extract a backtrace for it. As a side effect, this change ensures that the kernel will attempt to dump core using netdump if a user runs the panic command from within DDB. Previously, this would simply result in a reboot if a dump device had not been configured (which is generally the case when netdump is enabled). Reviewed by: rstone Sponsored by: Sandvine Inc. Modified: projects/sv/sys/kern/kern_shutdown.c projects/sv/sys/netinet/netdump.h projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/kern/kern_shutdown.c ============================================================================== --- projects/sv/sys/kern/kern_shutdown.c Mon Nov 25 23:45:50 2013 (r258610) +++ projects/sv/sys/kern/kern_shutdown.c Tue Nov 26 00:23:47 2013 (r258611) @@ -251,17 +251,11 @@ doadump(void) /* * If netdump finished successfully just return, otherwise give * traditional disk dumping a chance. - * - * Avoid a POLA breakage by skipping netdump when calling it from - * within KDB. That may change in the future. */ -#ifdef KDB - if (kdb_why == KDB_WHY_UNSET) -#endif - if (netdumpsys() == 0) { - dumping--; - return; - } + if (netdumpsys() == 0) { + dumping--; + return; + } #endif /* @@ -620,6 +614,17 @@ panic(const char *fmt, ...) kern_reboot(bootopt); } +#ifdef DDB +DB_COMMAND(netdump, ddb_force_netdump) +{ + + if (nd_enable) + netdumpsys(); + else + db_printf("netdump is not enabled\n"); +} +#endif + /* * Support for poweroff delay. * Modified: projects/sv/sys/netinet/netdump.h ============================================================================== --- projects/sv/sys/netinet/netdump.h Mon Nov 25 23:45:50 2013 (r258610) +++ projects/sv/sys/netinet/netdump.h Tue Nov 26 00:23:47 2013 (r258611) @@ -72,6 +72,8 @@ struct netdump_methods { int netdumpsys(void); +extern int nd_enable; + #endif #endif /* !_NETINET_NETDUMP_H_ */ Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Mon Nov 25 23:45:50 2013 (r258610) +++ projects/sv/sys/netinet/netdump_client.c Tue Nov 26 00:23:47 2013 (r258611) @@ -137,7 +137,7 @@ static struct in_addr nd_server = {INADD static struct in_addr nd_client = {INADDR_ANY}; static struct in_addr nd_gw = {INADDR_ANY}; struct ifnet *nd_ifp; -static int nd_enable = 0; +int nd_enable = 0; static uint16_t nd_server_port = NETDUMP_PORT; /* Tunables storages. */ @@ -1198,11 +1198,3 @@ netdump_config_defaults(void *dummy __un } } SYSINIT(netdump, SI_SUB_KLD, SI_ORDER_ANY, netdump_config_defaults, NULL); - -#ifdef DDB -DB_COMMAND(netdump, ddb_force_netdump) -{ - - netdumpsys(); -} -#endif