Replace sys_enter/exit from tests
[lttng-tools.git] / ltt-sessiond / event.c
CommitLineData
54d01ffb
DG
1/*
2 * Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the Free
6 * Software Foundation; only version 2 of the License.
7 *
8 * This program is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307, USA.
16 */
17
18#include <urcu/list.h>
19
20#include <lttng/lttng.h>
21#include <lttng-sessiond-comm.h>
22#include <lttngerr.h>
23
24#include "channel.h"
25#include "event.h"
26#include "kernel-ctl.h"
27
28/*
29 * Disable kernel event for a channel from the kernel session.
30 */
31int event_kernel_disable(struct ltt_kernel_session *ksession,
32 struct ltt_kernel_channel *kchan, char *event_name)
33{
34 int ret;
35 struct ltt_kernel_event *kevent;
36
37 kevent = trace_kernel_get_event_by_name(event_name, kchan);
38 if (kevent == NULL) {
39 ret = LTTCOMM_NO_EVENT;
40 goto error;
41 }
42
43 ret = kernel_disable_event(kevent);
44 if (ret < 0) {
45 ret = LTTCOMM_KERN_DISABLE_FAIL;
46 goto error;
47 }
48
49 DBG("Kernel event %s disable for channel %s.",
50 kevent->event->name, kchan->channel->name);
51
52 ret = LTTCOMM_OK;
53
54error:
55 return ret;
56}
57
58/*
59 * Disable all kernel event for a channel from the kernel session.
60 */
61int event_kernel_disable_all(struct ltt_kernel_session *ksession,
62 struct ltt_kernel_channel *kchan)
63{
64 int ret;
65 struct ltt_kernel_event *kevent;
66
67 /* For each event in the kernel session */
68 cds_list_for_each_entry(kevent, &kchan->events_list.head, list) {
69 ret = kernel_disable_event(kevent);
70 if (ret < 0) {
71 /* We continue disabling the rest */
72 continue;
73 }
74 }
75
76 ret = LTTCOMM_OK;
77
78 return ret;
79}
80
81/*
82 * Enable kernel event for a channel from the kernel session.
83 */
84int event_kernel_enable(struct ltt_kernel_session *ksession,
85 struct ltt_kernel_channel *kchan, struct lttng_event *event)
86{
87 int ret;
88 struct ltt_kernel_event *kevent;
89
90 kevent = trace_kernel_get_event_by_name(event->name, kchan);
91 if (kevent == NULL) {
92 ret = kernel_create_event(event, kchan);
93 if (ret < 0) {
94 ret = LTTCOMM_KERN_ENABLE_FAIL;
95 goto error;
96 }
97 } else if (kevent->enabled == 0) {
98 ret = kernel_enable_event(kevent);
99 if (ret < 0) {
100 ret = LTTCOMM_KERN_ENABLE_FAIL;
101 goto error;
102 }
103 }
104
105 ret = LTTCOMM_OK;
106
107error:
108 return ret;
109}
110
111/*
112 * Enable all kernel event of a channel of the kernel session.
113 */
114int event_kernel_enable_all(struct ltt_kernel_session *ksession,
115 struct ltt_kernel_channel *kchan, int kernel_tracer_fd)
116{
117 int size, i, ret;
118 struct ltt_kernel_event *kevent;
119 struct lttng_event *event_list;
120
121 /* For each event in the kernel session */
122 cds_list_for_each_entry(kevent, &kchan->events_list.head, list) {
123 ret = kernel_enable_event(kevent);
124 if (ret < 0) {
125 /* Enable failed but still continue */
126 continue;
127 }
128 }
129
130 size = kernel_list_events(kernel_tracer_fd, &event_list);
131 if (size < 0) {
132 ret = LTTCOMM_KERN_LIST_FAIL;
133 goto error;
134 }
135
136 for (i = 0; i < size; i++) {
137 kevent = trace_kernel_get_event_by_name(event_list[i].name, kchan);
138 if (kevent == NULL) {
139 /* Default event type for enable all */
140 event_list[i].type = LTTNG_EVENT_TRACEPOINT;
141 /* Enable each single tracepoint event */
142 ret = kernel_create_event(&event_list[i], kchan);
143 if (ret < 0) {
144 /* Ignore error here and continue */
145 }
146 }
147 }
148
149 free(event_list);
150
151 ret = LTTCOMM_OK;
152
153error:
154 return ret;
155}
This page took 0.027683 seconds and 4 git commands to generate.