lttng-modules v0.19-stable: setup_trace_write: Fix recursive locking
[lttng-modules.git] / ltt-event-header.c
1 /*
2 * ltt/ltt-event-header.c
3 *
4 * (C) Copyright 2010 - Mathieu Desnoyers (mathieu.desnoyers@efficios.com)
5 *
6 * LTTng event header.
7 *
8 * Author:
9 * Mathieu Desnoyers (mathieu.desnoyers@efficios.com)
10 *
11 * Dual LGPL v2.1/GPL v2 license.
12 */
13
14 #include <linux/module.h>
15
16 #include "ltt-tracer.h"
17 #include "ltt-relay.h"
18
19 size_t ltt_write_event_header_slow(struct ltt_chanbuf_alloc *bufa,
20 struct ltt_chan_alloc *chana,
21 long buf_offset, u16 eID, u32 event_size,
22 u64 tsc, unsigned int rflags)
23 {
24 struct ltt_event_header header;
25 u16 small_size;
26
27 switch (rflags) {
28 case LTT_RFLAG_ID_SIZE_TSC:
29 header.id_time = 29 << LTT_TSC_BITS;
30 break;
31 case LTT_RFLAG_ID_SIZE:
32 header.id_time = 30 << LTT_TSC_BITS;
33 break;
34 case LTT_RFLAG_ID:
35 header.id_time = 31 << LTT_TSC_BITS;
36 break;
37 default:
38 WARN_ON_ONCE(1);
39 header.id_time = 0;
40 }
41
42 header.id_time |= (u32)tsc & LTT_TSC_MASK;
43 ltt_relay_write(bufa, chana, buf_offset, &header, sizeof(header));
44 buf_offset += sizeof(header);
45
46 switch (rflags) {
47 case LTT_RFLAG_ID_SIZE_TSC:
48 small_size = (u16)min_t(u32, event_size, LTT_MAX_SMALL_SIZE);
49 ltt_relay_write(bufa, chana, buf_offset,
50 &eID, sizeof(u16));
51 buf_offset += sizeof(u16);
52 ltt_relay_write(bufa, chana, buf_offset,
53 &small_size, sizeof(u16));
54 buf_offset += sizeof(u16);
55 if (small_size == LTT_MAX_SMALL_SIZE) {
56 ltt_relay_write(bufa, chana, buf_offset,
57 &event_size, sizeof(u32));
58 buf_offset += sizeof(u32);
59 }
60 buf_offset += ltt_align(buf_offset, sizeof(u64));
61 ltt_relay_write(bufa, chana, buf_offset,
62 &tsc, sizeof(u64));
63 buf_offset += sizeof(u64);
64 break;
65 case LTT_RFLAG_ID_SIZE:
66 small_size = (u16)min_t(u32, event_size, LTT_MAX_SMALL_SIZE);
67 ltt_relay_write(bufa, chana, buf_offset,
68 &eID, sizeof(u16));
69 buf_offset += sizeof(u16);
70 ltt_relay_write(bufa, chana, buf_offset,
71 &small_size, sizeof(u16));
72 buf_offset += sizeof(u16);
73 if (small_size == LTT_MAX_SMALL_SIZE) {
74 ltt_relay_write(bufa, chana, buf_offset,
75 &event_size, sizeof(u32));
76 buf_offset += sizeof(u32);
77 }
78 break;
79 case LTT_RFLAG_ID:
80 ltt_relay_write(bufa, chana, buf_offset,
81 &eID, sizeof(u16));
82 buf_offset += sizeof(u16);
83 break;
84 }
85
86 return buf_offset;
87 }
88 EXPORT_SYMBOL_GPL(ltt_write_event_header_slow);
89
90 MODULE_LICENSE("GPL and additional rights");
91 MODULE_AUTHOR("Mathieu Desnoyers");
92 MODULE_DESCRIPTION("Linux Trace Toolkit Next Generation Event Header");
This page took 0.030111 seconds and 4 git commands to generate.