From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753154AbbIHFuA (ORCPT ); Tue, 8 Sep 2015 01:50:00 -0400 Received: from mgwkm04.jp.fujitsu.com ([202.219.69.171]:28805 "EHLO mgwkm04.jp.fujitsu.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753055AbbIHFt5 (ORCPT ); Tue, 8 Sep 2015 01:49:57 -0400 X-SecurityPolicyCheck: OK by SHieldMailChecker v2.2.3 X-SHieldMailCheckerPolicyVersion: FJ-ISEC-20140219-2 From: Takao Indoh To: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Peter Zijlstra , Arnaldo Carvalho de Melo , Alexander Shishkin , Vivek Goyal , Steven Rostedt CC: , Subject: [PATCH v2 1/4] perf/trace: Add function to find event type by name Date: Tue, 8 Sep 2015 14:49:21 +0900 Message-ID: <1441691364-5612-2-git-send-email-indou.takao@jp.fujitsu.com> X-Mailer: git-send-email 2.4.5 In-Reply-To: <1441691364-5612-1-git-send-email-indou.takao@jp.fujitsu.com> References: <1441691364-5612-1-git-send-email-indou.takao@jp.fujitsu.com> MIME-Version: 1.0 Content-Type: text/plain X-SecurityPolicyCheck-GC: OK by FENCE-Mail X-TM-AS-MML: disable Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds function to find struct trace_event by event name like "sched_switch" , and return its type so that Intel PT logger can enable the trace event in kernel. Intel PT logger needs this because it needs sched_switch tracing to collect side-band data. Signed-off-by: Takao Indoh --- include/linux/trace_events.h | 2 ++ kernel/trace/trace_event_perf.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 0 deletions(-) diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h index ed27917..d3cae4b 100644 --- a/include/linux/trace_events.h +++ b/include/linux/trace_events.h @@ -616,6 +616,8 @@ perf_trace_buf_submit(void *raw_data, int size, int rctx, u64 addr, { perf_tp_event(addr, count, raw_data, size, regs, head, rctx, task); } + +int perf_trace_event_get_type_by_name(char *system, char *name); #endif #endif /* _LINUX_TRACE_EVENT_H */ diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c index abfc903..1a851d5 100644 --- a/kernel/trace/trace_event_perf.c +++ b/kernel/trace/trace_event_perf.c @@ -21,6 +21,28 @@ typedef typeof(unsigned long [PERF_MAX_TRACE_SIZE / sizeof(unsigned long)]) /* Count the events in use (per event id, not per instance) */ static int total_ref_count; +int perf_trace_event_get_type_by_name(char *system, char *name) +{ + struct trace_event_call *tp_event; + int ret = 0; + /* + * All type is larger than __TRACE_LAST_TYPE + 1. Therefore return zero + * as a invalid type if not found. + */ + + mutex_lock(&event_mutex); + list_for_each_entry(tp_event, &ftrace_events, list) { + if (!strcmp(tp_event->class->system, system) && + !strcmp(trace_event_name(tp_event), name)) { + ret = tp_event->event.type; + break; + } + } + mutex_unlock(&event_mutex); + + return ret; +} + static int perf_trace_event_perm(struct trace_event_call *tp_event, struct perf_event *p_event) { -- 1.7.1