From patchwork Tue Jun 16 07:06:13 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunyan Zhang X-Patchwork-Id: 49943 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-lb0-f198.google.com (mail-lb0-f198.google.com [209.85.217.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 45070205DE for ; Tue, 16 Jun 2015 07:07:18 +0000 (UTC) Received: by lbbti3 with SMTP id ti3sf2046577lbb.1 for ; Tue, 16 Jun 2015 00:07:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=6qAVmtS1EqFToSbryrU3+cJ1UDS88ZxqcRjHJr0HWLA=; b=FaHvv/XMwUlgmLxMF9GxhjEUlN8+O5hhYhn62nnAae7WsLiFFBgKBiJ/jcTEMSDzZ9 yQ1WoI9Y5pwvUFLM/PHcczMoFm9HBn3WDcMVXdZLI34j1XKzVN6hOFo7UEHCQfb5mGkS nMbUowXbrjotZklOHlkZ/QuFK284qA4QIC+rTMmQsFdl5WEea3NFQUFfXlY7q6+EaOvd eBB7gcQXF8EJBSNOVVzHuhzRLgAZB0a4hsLfMfjcz++Y1PplUyPVh4e9SrWisMTPe3yf 3NaUHTf9ICG+D5iIut8Cl0BWgZn0rGW3dKCOo/c2W/Asn9t54U3Enwen54lLZYcuOkHl 3osg== X-Gm-Message-State: ALoCoQlFD87iGcaD0jVrTDlEtwn1btlt8RA1I8cXizR30FgQ1ZSl0Sc5cTm72f9YPWwKnejwVkKU X-Received: by 10.180.11.101 with SMTP id p5mr1628625wib.3.1434438437277; Tue, 16 Jun 2015 00:07:17 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.23.103 with SMTP id l7ls39052laf.35.gmail; Tue, 16 Jun 2015 00:07:17 -0700 (PDT) X-Received: by 10.152.5.65 with SMTP id q1mr31534327laq.110.1434438437019; Tue, 16 Jun 2015 00:07:17 -0700 (PDT) Received: from mail-lb0-f180.google.com (mail-lb0-f180.google.com. [209.85.217.180]) by mx.google.com with ESMTPS id rl1si78349lac.105.2015.06.16.00.07.16 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jun 2015 00:07:17 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.180 as permitted sender) client-ip=209.85.217.180; Received: by lblr1 with SMTP id r1so4742378lbl.0 for ; Tue, 16 Jun 2015 00:07:16 -0700 (PDT) X-Received: by 10.112.198.74 with SMTP id ja10mr4549524lbc.19.1434438436909; Tue, 16 Jun 2015 00:07:16 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.108.230 with SMTP id hn6csp1912976lbb; Tue, 16 Jun 2015 00:07:15 -0700 (PDT) X-Received: by 10.70.54.196 with SMTP id l4mr24861575pdp.2.1434438435066; Tue, 16 Jun 2015 00:07:15 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id gd3si134793pbd.179.2015.06.16.00.07.12; Tue, 16 Jun 2015 00:07:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756251AbbFPHHA (ORCPT + 30 others); Tue, 16 Jun 2015 03:07:00 -0400 Received: from mail-pa0-f53.google.com ([209.85.220.53]:32772 "EHLO mail-pa0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751535AbbFPHGz (ORCPT ); Tue, 16 Jun 2015 03:06:55 -0400 Received: by padev16 with SMTP id ev16so7095147pad.0 for ; Tue, 16 Jun 2015 00:06:55 -0700 (PDT) X-Received: by 10.70.42.233 with SMTP id r9mr55156020pdl.140.1434438415203; Tue, 16 Jun 2015 00:06:55 -0700 (PDT) Received: from zcy-ubuntu.spreadtrum.com ([175.111.195.49]) by mx.google.com with ESMTPSA id xo3sm162094pbb.74.2015.06.16.00.06.51 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 16 Jun 2015 00:06:54 -0700 (PDT) From: Chunyan Zhang To: rostedt@goodmis.org, mingo@redhat.com Cc: mathieu.poirier@linaro.org, serge.broslavsky@linaro.org, broonie@linaro.org, alexander.shishkin@linux.intel.com, zhang.lyra@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC PATCH v2 3/3] Introduce trace log output function for STM Date: Tue, 16 Jun 2015 15:06:13 +0800 Message-Id: <1434438373-32226-4-git-send-email-zhang.chunyan@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1434438373-32226-1-git-send-email-zhang.chunyan@linaro.org> References: <1434438373-32226-1-git-send-email-zhang.chunyan@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: zhang.chunyan@linaro.org X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.217.180 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , This patch introduced a few functions to print the event trace log to STM buffer when the trace event happen and the event information would be committed to ring buffer. Before outputting the trace log to STM, we have to get the human readable trace log content and print it into a local buffer in the format of a string, the function 'trace_event_buf_vprintf()' is just for this purpose. Signed-off-by: Chunyan Zhang --- kernel/trace/Makefile | 1 + kernel/trace/trace_output_stm.c | 99 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 kernel/trace/trace_output_stm.c diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile index 9b1044e..002de34 100644 --- a/kernel/trace/Makefile +++ b/kernel/trace/Makefile @@ -67,4 +67,5 @@ obj-$(CONFIG_UPROBE_EVENT) += trace_uprobe.o obj-$(CONFIG_TRACEPOINT_BENCHMARK) += trace_benchmark.o +obj-$(CONFIG_STM_TRACE_EVENT) += trace_output_stm.o libftrace-y := ftrace.o diff --git a/kernel/trace/trace_output_stm.c b/kernel/trace/trace_output_stm.c new file mode 100644 index 0000000..1cf6d87 --- /dev/null +++ b/kernel/trace/trace_output_stm.c @@ -0,0 +1,99 @@ +#include +#include +#include +#include "trace.h" + +#define STM_OUTPUT_STRLEN 128 + +/* store the event trace log for STM */ +struct trace_buffer_stm { + char buffer[STM_OUTPUT_STRLEN]; + unsigned int used_len; + unsigned int size; +}; + +static struct trace_buffer_stm *trace_event_stm_buffer; +static struct trace_seq *stm_tmp_seq; +static int stm_buffers_allocated; + +void trace_event_buf_vprintf(struct trace_buffer_stm *tb, const char *fmt, ...) +{ + va_list ap; + char *buffer = tb->buffer + tb->used_len; + unsigned int size = tb->size - tb->used_len; + + va_start(ap, fmt); + tb->used_len += vsnprintf(buffer, size, fmt, ap); + va_end(ap); +} +EXPORT_SYMBOL_GPL(trace_event_buf_vprintf); + +static inline void stm_buf_reset(struct trace_buffer_stm *tb) +{ + tb->used_len = 0; +} + +void trace_event_stm_log(struct ftrace_event_buffer *fbuffer) +{ + + struct trace_seq *p = stm_tmp_seq; + struct trace_buffer_stm *tb; + struct ftrace_event_call *event_call = fbuffer->ftrace_file->event_call; + struct trace_entry *entry = (struct trace_entry *)fbuffer->entry; + + if (!stm_buffers_allocated) + return; + + tb = trace_event_stm_buffer; + + if (event_call->output_stm) + event_call->output_stm(p, entry, tb); + + stm_trace_event_write(tb->buffer, tb->used_len); + + stm_buf_reset(tb); +} +EXPORT_SYMBOL_GPL(trace_event_stm_log); + +static int alloc_stm_tmp_seq(void) +{ + struct trace_seq *seq; + + seq = kzalloc(sizeof(struct trace_seq), GFP_KERNEL); + if (!seq) + return -ENOMEM; + + stm_tmp_seq = seq; + + return 0; +} + +static int alloc_stm_trace_buffer(void) +{ + struct trace_buffer_stm *buffer; + + buffer = kzalloc(sizeof(struct trace_buffer_stm), GFP_KERNEL); + if (!buffer) + return -ENOMEM; + + buffer->used_len = 0; + buffer->size = ARRAY_SIZE(buffer->buffer); + + trace_event_stm_buffer = buffer; + + return 0; +} + +static __init int trace_stm_init_buffers(void) +{ + if (alloc_stm_trace_buffer()) + return -ENOMEM; + + if (alloc_stm_tmp_seq()) + return -ENOMEM; + + stm_buffers_allocated = 1; + + return 0; +} +fs_initcall(trace_stm_init_buffers);