From patchwork Fri Jun 5 05:38:26 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunyan Zhang X-Patchwork-Id: 49555 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-lb0-f197.google.com (mail-lb0-f197.google.com [209.85.217.197]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id EB6202154F for ; Fri, 5 Jun 2015 05:38:42 +0000 (UTC) Received: by lbcue7 with SMTP id ue7sf15083621lbc.3 for ; Thu, 04 Jun 2015 22:38:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:mime-version:date:message-id :subject:from:to:cc:content-type:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=6gVf99UxUmWrAV7yCNWifTZEqT50IT11b/0szaYw7B0=; b=YrbAizNyo1VPIZlzixBWGBYNju9mhZC5RuNjCE80W3ZZplxhTrqI7ygPqDDOV6N4d+ SfcXCuiPHN6sWsvb/gDhC9vegcTdGCxv4aFRY9/j2xEumHwU+m+2i8E2aeyQAhhM7FoV p19aM9/R9ntxjDno1lWO0+QCDc4DtREEjVInsfSE9cOX9iTFh43wq19/Aoi1zmLWcX2L juUJGoqEjKSV+piZbB1dBT2m0qLWrNXlatQXMgx18cvqUWBcQ5HdcktwDIuwi+xvwT4u /8DbCwFHgfKzw3FZfgwUci/YAvrrl3u1JswX+2+hp5O25xorpuE54lshmxY/r3jTXkEq vqPw== X-Gm-Message-State: ALoCoQn9yc8szGWRkYeM+1wF9KbgQSEW7dTnzxc/BGtOh4PJcbJGefpVfdasDGtfDPMSqp2x9o6j X-Received: by 10.112.144.4 with SMTP id si4mr1589707lbb.17.1433482721563; Thu, 04 Jun 2015 22:38:41 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.163.65 with SMTP id yg1ls286834lab.26.gmail; Thu, 04 Jun 2015 22:38:41 -0700 (PDT) X-Received: by 10.112.218.67 with SMTP id pe3mr1520359lbc.53.1433482721388; Thu, 04 Jun 2015 22:38:41 -0700 (PDT) Received: from mail-la0-f51.google.com (mail-la0-f51.google.com. [209.85.215.51]) by mx.google.com with ESMTPS id oc5si2800643lbc.151.2015.06.04.22.38.41 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 04 Jun 2015 22:38:41 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.51 as permitted sender) client-ip=209.85.215.51; Received: by laew7 with SMTP id w7so46696407lae.1 for ; Thu, 04 Jun 2015 22:38:41 -0700 (PDT) X-Received: by 10.112.93.37 with SMTP id cr5mr1636169lbb.106.1433482721189; Thu, 04 Jun 2015 22:38:41 -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 hn6csp1138924lbb; Thu, 4 Jun 2015 22:38:40 -0700 (PDT) X-Received: by 10.66.161.102 with SMTP id xr6mr3174441pab.8.1433482719350; Thu, 04 Jun 2015 22:38:39 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t5si9328069pdm.57.2015.06.04.22.38.33; Thu, 04 Jun 2015 22:38:39 -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 S932350AbbFEFi3 (ORCPT + 28 others); Fri, 5 Jun 2015 01:38:29 -0400 Received: from mail-wg0-f52.google.com ([74.125.82.52]:36711 "EHLO mail-wg0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932066AbbFEFi1 (ORCPT ); Fri, 5 Jun 2015 01:38:27 -0400 Received: by wgbgq6 with SMTP id gq6so48182829wgb.3 for ; Thu, 04 Jun 2015 22:38:26 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.194.133.73 with SMTP id pa9mr3107177wjb.148.1433482706763; Thu, 04 Jun 2015 22:38:26 -0700 (PDT) Received: by 10.194.14.194 with HTTP; Thu, 4 Jun 2015 22:38:26 -0700 (PDT) Date: Fri, 5 Jun 2015 13:38:26 +0800 Message-ID: Subject: [RFC PATCH 3/3] Introduce trace log output function for STM From: Chunyan Zhang To: Steven Rostedt , mingo@redhat.com Cc: Mathieu Poirier , Kaixu Xia , Serge Broslavsky , Mark Brown , alexander.shishkin@linux.intel.com, "linux-kernel@vger.kernel.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.215.51 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 -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ 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);