blob: 55a25c933d159d5a289265e604d608d96277e63c [file] [log] [blame]
Peter Zijlstraac199db2009-03-19 20:26:15 +01001/*
2 * trace event based perf counter profiling
3 *
4 * Copyright (C) 2009 Red Hat Inc, Peter Zijlstra <pzijlstr@redhat.com>
5 *
6 */
7
Li Zefan558e6542009-08-24 12:19:47 +08008#include <linux/module.h>
Peter Zijlstraac199db2009-03-19 20:26:15 +01009#include "trace.h"
10
11int ftrace_profile_enable(int event_id)
12{
13 struct ftrace_event_call *event;
Li Zefan20c89282009-05-06 10:33:45 +080014 int ret = -EINVAL;
Peter Zijlstraac199db2009-03-19 20:26:15 +010015
Li Zefan20c89282009-05-06 10:33:45 +080016 mutex_lock(&event_mutex);
Steven Rostedta59fd602009-04-10 13:52:20 -040017 list_for_each_entry(event, &ftrace_events, list) {
Li Zefan558e6542009-08-24 12:19:47 +080018 if (event->id == event_id && event->profile_enable &&
19 try_module_get(event->mod)) {
Li Zefan20c89282009-05-06 10:33:45 +080020 ret = event->profile_enable(event);
21 break;
22 }
Peter Zijlstraac199db2009-03-19 20:26:15 +010023 }
Li Zefan20c89282009-05-06 10:33:45 +080024 mutex_unlock(&event_mutex);
Peter Zijlstraac199db2009-03-19 20:26:15 +010025
Li Zefan20c89282009-05-06 10:33:45 +080026 return ret;
Peter Zijlstraac199db2009-03-19 20:26:15 +010027}
28
29void ftrace_profile_disable(int event_id)
30{
31 struct ftrace_event_call *event;
32
Li Zefan20c89282009-05-06 10:33:45 +080033 mutex_lock(&event_mutex);
Steven Rostedta59fd602009-04-10 13:52:20 -040034 list_for_each_entry(event, &ftrace_events, list) {
Li Zefan20c89282009-05-06 10:33:45 +080035 if (event->id == event_id) {
36 event->profile_disable(event);
Li Zefan558e6542009-08-24 12:19:47 +080037 module_put(event->mod);
Li Zefan20c89282009-05-06 10:33:45 +080038 break;
39 }
Peter Zijlstraac199db2009-03-19 20:26:15 +010040 }
Li Zefan20c89282009-05-06 10:33:45 +080041 mutex_unlock(&event_mutex);
Peter Zijlstraac199db2009-03-19 20:26:15 +010042}