From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757010Ab1KPPKG (ORCPT ); Wed, 16 Nov 2011 10:10:06 -0500 Received: from he.sipsolutions.net ([78.46.109.217]:42622 "EHLO sipsolutions.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753652Ab1KPPKD (ORCPT ); Wed, 16 Nov 2011 10:10:03 -0500 Subject: [PATCH v2] tracing: add trace console From: Johannes Berg To: Steven Rostedt Cc: LKML , Frederic Weisbecker , Ingo Molnar , Peter Zijlstra , Thomas Gleixner , Andrew Morton In-Reply-To: <1321452954.4181.20.camel@frodo> References: <1321438728.4773.16.camel@jlt3.sipsolutions.net> <1321452954.4181.20.camel@frodo> Content-Type: text/plain; charset="UTF-8" Date: Wed, 16 Nov 2011 16:09:58 +0100 Message-ID: <1321456198.4502.10.camel@jlt3.sipsolutions.net> Mime-Version: 1.0 X-Mailer: Evolution 2.30.3 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Johannes Berg As described in the Kconfig entry, logging printk output is useful to correlate (existing) printk debugging with (existing) tracing. The easiest way to achieve this is to register a console that just calls trace_printk(), which this module does. Signed-off-by: Johannes Berg --- v2: change Kconfig wording kernel/trace/Kconfig | 15 +++++++++++ kernel/trace/Makefile | 2 + kernel/trace/trace-console.c | 55 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) --- a/kernel/trace/Kconfig 2011-11-16 15:33:29.000000000 +0100 +++ b/kernel/trace/Kconfig 2011-11-16 16:08:27.000000000 +0100 @@ -368,6 +368,21 @@ config BLK_DEV_IO_TRACE If unsure, say N. +config TRACE_CONSOLE + tristate "Support for a tracing console" + help + Enable this to get a tracing console that puts every kernel message + into the tracing infrastructure using trace_printk(). This is useful + to correlate (existing) printk debugging with tracing. When using it + remember to set the console level, e.g. with "dmesg -n8". + + Note that if you say Y here you will get every message into tracing + and will not be able to turn it off. + + The module is called trace-console. + + Say N if unsure. + config KPROBE_EVENT depends on KPROBES depends on HAVE_REGS_AND_STACK_ACCESS_API --- a/kernel/trace/Makefile 2011-11-16 15:33:29.000000000 +0100 +++ b/kernel/trace/Makefile 2011-11-16 16:07:14.000000000 +0100 @@ -62,4 +62,6 @@ ifeq ($(CONFIG_TRACING),y) obj-$(CONFIG_KGDB_KDB) += trace_kdb.o endif +obj-$(CONFIG_TRACE_CONSOLE) += trace-console.o + libftrace-y := ftrace.o --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ b/kernel/trace/trace-console.c 2011-11-16 16:07:14.000000000 +0100 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2011 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * The full GNU General Public License is included in this distribution in + * the file called COPYING. + * + * Author: Johannes Berg + */ +#include +#include +#include + +MODULE_AUTHOR("Johannes Berg "); +MODULE_DESCRIPTION("Console driver for tracing"); +MODULE_LICENSE("GPL"); + + +static void trace_msg(struct console *con, const char *msg, unsigned int len) +{ + trace_printk("%*s", len, msg); +} + +static struct console traceconsole = { + .name = "tracecon", + .flags = CON_ENABLED, + .write = trace_msg, +}; + +static int __init init_traceconsole(void) +{ + register_console(&traceconsole); + return 0; +} + +static void __exit exit_traceconsole(void) +{ + unregister_console(&traceconsole); +} + +module_init(init_traceconsole); +module_exit(exit_traceconsole);